Скажите, у меня есть это,
engine = sa.create_engine('sqlite:///tmp.db', echo=True)
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session(expire_on_commit=False)
# add a user
u1 = User(name="u1")
session.add(u1)
session.commit()
print(u1.id) # --> 15
Я использую Postgres, и я вижу оператор вставки insert into (name) values('u1') RETURNING user.id
Теперь для моих вопросов.
- Как Sqlalchemy связывает этот возвращенный идентификатор с объектом?
- Такое поведение
returning id
наблюдается в mysql et c.? Если нет, как происходит ассоциация? - print (user.id) # -> 15. Как это работало, если я не обновил объект или не устарел?
- Если бы я мог получить идентификатор без обновления, тогда какова цель refre sh? Разве механизм «refre sh после каждого коммита» не является дорогостоящим, учитывая, что есть 2 вызова базы данных? Или я что-то упустил?