0

当我尝试插入复合主键连接时返回 0 行:

CompetitionRound = sa.Table('CompetitionRound', metadata,
                            sa.Column('CompetitionId', sa.Integer, sa.ForeignKey('Competitions.Id'), primary_key=True),
                            sa.Column('RoundId', sa.Integer, sa.ForeignKey('Rounds.Id'), primary_key=True))
...
competition_round_insert = await conn.execute(
    CompetitionRound.insert()
                    .values(CompetitionId=competition_id,
                            RoundId=round_id))
competition_round_row = await competition_round_insert.fetchone()

似乎不可能将复合主键作为值插入......但是在这种情况下如何插入键?不幸的是,我在 SQLAlchemy 文档中没有找到一些例子......(

4

1 回答 1

1

根据我对文档的了解,SQLAlchemy 仅隐式返回autoincrement主键,而复合 PK 尤其不是:

自动递增

autoincrement 标志现在默认为“auto”,这表示默认情况下自动增量语义仅适用于单列整数主键;对于复合(多列)主键,永远不会隐式启用自动增量;与往常一样, autoincrement=True 最多允许这些列中的一个成为“自动增量”列。autoincrement=True 也可以在具有显式客户端或服务器端默认值的列上设置,受后端数据库和方言的限制。

插入的主键

请注意,指定 server_default 子句的主键列,或者不符合“自动增量”列的条件(请参阅 Column 中的注释),并且使用数据库端默认值生成,将在此列表中显示为 None 除非后端支持“返回”和启用“隐式返回”执行的插入语句。

这意味着您可能希望在插入时使用显式返回子句。并不是说我真的明白这一点,但自从您插入它们以来,您显然拥有相关的值。

于 2020-06-10T14:11:32.053 回答