Почему я должен refre sh после коммита - Sqlalchemy - PullRequest
0 голосов
/ 20 апреля 2020

Скажите, у меня есть это,

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

Теперь для моих вопросов.

  1. Как Sqlalchemy связывает этот возвращенный идентификатор с объектом?
  2. Такое поведение returning id наблюдается в mysql et c.? Если нет, как происходит ассоциация?
  3. print (user.id) # -> 15. Как это работало, если я не обновил объект или не устарел?
  4. Если бы я мог получить идентификатор без обновления, тогда какова цель refre sh? Разве механизм «refre sh после каждого коммита» не является дорогостоящим, учитывая, что есть 2 вызова базы данных? Или я что-то упустил?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...