python - SQLAlchemy 与额外列的多对多关系
问题描述
我创建了两个表a
,b
它们使用 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
值,因为它不是自动递增的。我不知道怎么做。任何帮助或示例或参考链接将不胜感激。
解决方案
推荐阅读
- amazon-web-services - 如何从 EC2 实例收集日志并将其存储在 S3 存储桶中?
- python - 有没有一种有效的方法来获取 pyshark 中的字段偏移量
- bash - 从过滤器位于第一列的第二列中选择匹配项
- javascript - 在 Date 上添加日期时的奇怪行为
- python - cx_Freeze + curses: 'NoneType' 对象没有属性 'fileno'
- css - 使用 SASS 导入自定义字体时出错
- r - R:匹配两个数据帧中的值,例如 vlookup,但对于没有 Key [大数据] 的多个条件
- ios - 如何过滤时间戳数组以保持特定时间?
- angular - 没有箭头功能的 Typescript/Angular2 委托
- javascript - 2 Promise 中的 SetTimeOut 方法不起作用