带有2个primary_keys的SQLAlchemy表如何自动增加第一个主键

时间:2016-03-22 09:35:29

标签: python sqlalchemy

我有2个主键的表,其中第二个主键也是外键。当我尝试填充数据库时,我将得到“NOT NULL约束失败:items.id1”错误。填充时,我将始终为id2提供已知的id。那么如何让sqlalchemy自动增加id1?

class items(Base):
    __tablename__ = 'items'
    id1 = Column(BIGINT(unsigned=True).with_variant(Integer, "sqlite"), primary_key=True,)
    #location id
    id2 = Column(Integer, ForeignKey('table2.id'), primary_key=True)

id1和id2的组合必须始终是唯一的,并且这些组合用于识别项目。 id1是不够的,因为数据库可以位于多个位置,并且表是不时同步的。

我已经尝试过这个解决方案,但它已经过时了,不再适用了:How to insert a row with autoincrement id in a multi-primary-key table?

编辑: 解决此问题的方法是使用Postgres DB。 SQLite很简单但是很蠢。

1 个答案:

答案 0 :(得分:1)

如果您使用的是sqlite:

foreach ( $arr1 as $key1 => $entry1 ) {
    foreach ( $arr2 as $key2 => $entry2 ) {
        if ($entry1 ["animal"] == $entry2 ["title"]) {
            $arr1 [$key1] ["name"] = $entry2 ["name"];
        }
    }
}

如果您使用的是mysql,那么简单的自动增量将起作用:

$arr1 = array (
        array (
                "animal" => "cat",
                "color" => "grey" 
        ),
        array (
                "animal" => "dog",
                "color" => "black",
                "name" => "Barney"
        ),
        array (
                "animal" => "mouse",
                "color" => "white",
                "name" => "Georgie"
        ) 
);

P.S。:首先删除表格,然后重试。