使用SqlAlchemy ORM将一列引用到另一个不同的表

2024-09-29 19:18:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下场景

  1. 我需要插入一个主键类型为“serial”的表(table1)。在
  2. 现在我需要插入另一个表(table2),其中包含table1的主键作为外键。在
  3. 现在两个插入都将在同一个事务中进行,生成的主键应该在表2中进行引用

让我们看看我做了什么

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作为15插入到table1中, 但它在表2中被称为“null”。


Tags: namebasestringsessioncolumnintegerclass主键
1条回答
网友
1楼 · 发布于 2024-09-29 19:18:34

在Python中创建模型对象时,它还没有刷新到数据库中。对于串行列,DB负责生成新值,因此它只是在生成之前None。在声明中

table2 = Table2(table2id=table1.table1id)

您只需阅读None,并将其作为关键字参数传递给table2id。为了获得一个值,您需要flush对数据库的更改,因此您应该对操作重新排序:

^{pr2}$

如果您要在表1和表2之间定义relationships,或者这实际上是一个inheritance hierarchy,那么SQLAlchemy也可以或多或少地为您自动执行大部分操作。在

相关问题 更多 >

    热门问题