0

この方法で sqlalchemy.schema.CheckConstraint を使用しようとしています:

themes2tags_table = Table('themes2tags', Base.metadata,
    Column('theme_id', String(32), ForeignKey('tags.id')),
    Column('tag_id', String(32), ForeignKey('tags.id')),
    PrimaryKeyConstraint(['theme_id', 'tag_id']),
    CheckConstraint("substr(theme_id,1,1)='3'"))

(タグテーブルに対する多対多の自己参照関係を意味し、テーマは定義済みのプレフィックスを持つタグであることは明らかです)、最終的には

    ...CheckConstraint("substr(theme_id,1,1)='3'")
  File "build\bdist.win32\egg\sqlalchemy\schema.py", line 303, in __new__
  File "build\bdist.win32\egg\sqlalchemy\schema.py", line 370, in _init
  File "build\bdist.win32\egg\sqlalchemy\schema.py", line 64, in _init_items
  File "build\bdist.win32\egg\sqlalchemy\events.py", line 234, in _set_parent_wi
th_dispatch
  File "build\bdist.win32\egg\sqlalchemy\schema.py", line 2133, in _set_parent
  File "build\bdist.win32\egg\sqlalchemy\schema.py", line 1909, in _set_parent
  File "build\bdist.win32\egg\sqlalchemy\schema.py", line 1883, in _set_parent
  File "build\bdist.win32\egg\sqlalchemy\sql\expression.py", line 2213, in add
AttributeError: 'list' object has no attribute 'key'

ここでどこが間違っていますか?これらの状況でそのような制約を持つことは可能ですか?

現在のバックエンドは sqlite ですが、将来的に Postgres に移行することを検討しているため、より汎用性の低いレシートを探しています。

更新: sqlalchemy 0.7.5

4

1 に答える 1

1

しかし、実際には、間違ったエラーメッセージに基づいて、それは私のせいでした。結局のところ、実際のエラーは前の行にありました。つまり、正しい構文は次のとおりです。

themes2tags_table = Table('themes2tags', Base.metadata,
    Column('theme_id', String(32), ForeignKey('tags.id')),
    Column('tag_id', String(32), ForeignKey('tags.id')),
    PrimaryKeyConstraint(*['theme_id', 'tag_id']),
    CheckConstraint("substr(theme_id,1,1)='3'"))

PrimaryKeyConstraintでリストを定義する前に、そのアスタリスクに注意してください。

于 2012-08-01T07:48:46.487 に答える