1

假设我有两张桌子,foo 和 bar。两者都有主键。我想在 SQLAlchemy 中设置它,以便 foo.id 和 bar.id 的组合是唯一的。我该怎么做?

我尝试添加另一个只包含主键并在 foo 和 bar 中有外键的表,如下所示:

class foo(Base):
    __tablename__ = 'foo'
    id = Column(Integer, ForeignKey('primary_keys.id'), primary_key=True) 

class bar(Base):
    __tablename__ = 'bar'
    id = Column(Integer, ForeignKey('primary_keys.id'), primary_key=True) 

class primary_keys(Base):
    __tablename__ = 'primary_keys'
    id= Column(Integer, primary_key=True)

但它给了我这个错误:

FlushError:实例具有 NULL 身份密钥。如果这是一个自动生成的值,请检查数据库表是否允许生成新的主键值,以及映射的 Column 对象是否配置为期望这些生成的值。还要确保此 flush() 不会在不适当的时间发生,例如在 load() 事件中。

对于我正在尝试做的事情,是否有更好的解决方案?

编辑:我正在使用 sqlite 数据库。

4

1 回答 1

0

如果您使用 postgresql 或 oracle,则可以将 foo 和 bar 的主键定义为使用相同的序列。

http://docs.sqlalchemy.org/en/rel_1_0/core/defaults.html#defining-sequences

table = Table("cartitems", meta,
    Column("cart_id", Integer, Sequence('cart_id_seq'), primary_key=True),
)

序列对象基本上会做你试图用你的 primary_keys 表做的事情

于 2015-08-27T14:17:21.110 回答