首页 > 解决方案 > SQLAlchemy 与额外列的多对多关系

问题描述

我创建了两个表ab它们使用 table 以多对多关系相互关联a_to_b。下面的代码是我实现它的方式。在表中a_to_b,我需要id一个整数列,但不是自动递增的。我需要这个来识别另一个用例的关系。

a_to_b = Table(
    "a_to_b",
    ormbase.metadata,
    Column("id", Integer(), nullable=False),
    Column("a_id", Integer(), ForeignKey("a.id"), primary_key=True),
    Column("b_id", Integer(), ForeignKey("b.id"), primary_key=True),
)


class A(ormbase):
    __tablename__ = 'a'
    id = Column(Integer, primary_key=True, autoincrement=True)
    column1 = Column(String)
    ...
    
    b_rel = relationship("b", secondary=a_to_b, backref="a_rel")

class B(ormbase):
    __tablename__ = 'b'
    id = Column(Integer, primary_key=True, autoincrement=True)
    column1 = Column(String)
    ...

在我尝试添加两个对象之间的关系之前,这一切都很好。要在两个对象之间添加关系,通常我可以将相关对象附加到关系属性,如下所示:

a = A(column1="some info"...)
b = B(column1="some other info"...)

a.b_rel.append(b)
session.add(a)
session.flush()

但是当我有一个额外的id列时,我收到以下错误:

(psycopg2.errors.NotNullViolation) null value in column "id" violates not-null constraint
DETAIL:  Failing row contains (null, 1, 183).

现在我知道我必须指定该id值,因为它不是自动递增的。我不知道怎么做。任何帮助或示例或参考链接将不胜感激。

标签: pythonpython-3.xsqlalchemy

解决方案


推荐阅读