在创建新记录时,我希望外键字段和它们的关系对象保持同步(如果我改变一个,另一个会改变以反映),但这似乎不是案子。这可能吗?
鉴于以下内容:
Base = declarative_base();
class User(Base):
__tablename__ = 'user';
id = Column(Integer, primary_key=True);
name = Column(String);
fullname = Column(String);
password = Column(String);
equipment = relationship('Equipment', backref='user');
class Equipment(Base):
__tablename__ = 'equipment';
id = Column(Integer, primary_key=True);
user_id = Column(Integer, ForeignKey('user.id'), nullable=False);
name = Column(String);
engine = create_engine('sqlite:///:memory:', echo=True);
Base.metadata.create_all(engine);
session = sessionmaker(bind=engine);
conn = session();
conn.add_all([
User(name='bill', fullname='Bill W.', password='rlrrlrll'), # id=1
User(name='tony', fullname='Tony I.', password='EADGBe'), # id=2
User(name='ozzy', fullname='Ozzy O.', password='durrrr'), # id=3
User(name='geezer', fullname='Terence B.', password='password'), # id=4
]);
我可以用以下两种方式之一创建相关记录:
guitar = Equipment(
user = conn.query(User).filter(User.name == 'tony').one(),
name = 'Gibson SG');
drums = Equipment(
user_id = 1,
name = 'Ludwigs');
按照以下几行,我希望guitar.user_id为2,而drums.user是' bill'对象,但在这两种情况下,他们都没有。在我conn.add()/ conn.commit()之后,它开始工作了一点,就像我期望的那样(两个互补字段都返回非None值)。
有没有办法让这个工作预先提交?我希望能够以任何方式(通过ID或按对象)构建新记录,并且在库函数中能够可靠地访问ID或对象。
答案 0 :(得分:0)
你可以通过刷新来完成这个:
manufacturerId
Flushing会发出conn.add(guitar)
conn.add(name)
conn.flush()
个查询,但不会INSERT
,这意味着如果需要,您可以COMMIT
。