我有以下情况,
让我们展示一下我的尝试
Base = declarative_base()
class Table1(Base):
__tablename__ = 'table1'
table1id= Column(Integer, primary_key=True)
name = Column(String)
class Table2(Base):
__tablename__ = 'table2'
table2id= Column(Integer, ForeignKey('table1.table1id'))
name = Column(String)
#
table1 = Table1(name='abc')
table2 = Table2(table2id=table1.table1id)
session.add(table1)
session.add(table2 )
session.commit()
当我运行此代码时,table1id在table1中插入为15, 但它在表2中被称为“null”。
答案 0 :(得分:1)
在Python中创建模型对象时,它尚未刷新到数据库。在串行列的情况下,DB负责生成新值,因此在生成之前它只是None
。在声明中
table2 = Table2(table2id=table1.table1id)
您只需阅读None
并将其作为关键字参数 table2id 传递。为了获得一个值,您需要flush对数据库的更改,所以您应该稍微重新排序操作:
table1 = Table1(name='abc')
session.add(table1)
# Flush the changes to the DB
session.flush()
table2 = Table2(table2id=table1.table1id)
session.add(table2)
session.commit()
如果您在表1和表2之间定义relationships,或者这实际上是inheritance hierarchy,则SQLAlchemy也可以或多或少自动执行大部分操作。