2016-03-22 4 views
0

2つのプライマリキーを持つテーブルがあります.2番目のプライマリキーも外部キーです。私がDBに移入しようとすると、NOT NULL制約に失敗しました:items.id1というエラーが発生します。人口を埋めるとき、私は常にid2の既知のidを提供します。ですから、どのようにsqlalchemyをid1の自動インクリメントにすることができますか?2つのprimary_keysを持つSQLAlchemyテーブル最初のプライマリキーを自動インクリメントする方法

id1とid2の組み合わせは常に一意でなければならず、これらの2つの組み合わせはアイテムを識別するために使用されます。 id1はデータベースが複数の場所にあり、テーブルが時々同期しているので十分ではありません。

私はすでにこのソリューションを試してみましたが、それは時代遅れだともう動作しません:How to insert a row with autoincrement id in a multi-primary-key table?

EDIT:この問題の回避 作業はPostgresのDBを使用することです。 SQLiteは軽いですがダムです。

+0

このautoincrement = Trueを試してください。 –

+0

何も同じエラーはありません。 –

+0

別のオプションは、2つの主キーの代わりにuuidsを使用することです。そうすることで、IDが一意であることを常に知ることができます: 'from uuid import uuid4; id = Column(String、primary_key = True、デフォルト=ラムダ:uuid4()) '。この時点で、外部キーにプライマリキーをドロップすることができます。これは、識別子として不要になったためです。 –

答えて

0

あなたはsqliteのを使用している場合は:

id1 = Column(BIGINT(unsigned=True).with_variant(Integer, "sqlite"), primary_key=True, autoincrement=True) 
id2 = Column(Integer, ForeignKey('table2.id'), primary_key=True, autoincrement=False) 

P.S:ドロップテーブル最初にして、もう一度試してください:

id1 = Column(BIGINT(unsigned=True).with_variant(Integer, "sqlite"), primary_key=True, sqlite_autoincrement=True) 
id2 = Column(Integer, ForeignKey('table2.id'), primary_key=True, sqlite_autoincrement=False) 

MySQLを使用している場合は、簡単な自動インクリメントが動作します。

+0

"未知の引数がColumn:['sqlite_autoincrement']に渡され、id2にautoincrement = Falseが設定されている場合、" NOT NULL constraint failed "と表示されます。現在のところ、私のdbはsqlite3ですが、私はすぐにpostgresに変更します、多分それはそこで動作します... –

関連する問題