3

私はpythonでアプリを構築しています。データベース スキーマを追跡するためにsqlalchemy-migrateを使用しています。id と name の 2 つの列を持つテーブル user_category があります。user_category テーブルへの外部キーを持つユーザー テーブルを作成しようとしています。ユーザーテーブルを作成するための私の変更スクリプトは次のとおりです。

from sqlalchemy import *
from migrate import *
from migrate.changeset import *

meta = MetaData()
user_category = Table('user_category', meta)

user = Table('user', meta,
    Column('id', Integer, primary_key=True),
    Column('email', String(255)),
    Column('first_name', String(40)),
    Column('surname', String(40)),
    Column('password', String(255)),
    Column('user_category', Integer, ForeignKey("user_category.id")),
)

def upgrade(migrate_engine):
    # Upgrade operations go here. Don't create your own engine; bind migrate_engine
    # to your metadata
    meta.bind = migrate_engine
    user.create()

def downgrade(migrate_engine):
    # Operations to reverse the above upgrade go here.
    meta.bind = migrate_engine
    user.drop()

「manage.py test」を実行すると、次のエラーが表示されます。

sqlalchemy.exc.NoReferencedColumnError: Could not create ForeignKey 'user_catego
ry.id' on table 'user': table 'user_category' has no column named 'id'
4

2 に答える 2

5

テーブルの定義をコピーして貼り付ける代わりに、user_categorySQLAlchemy にデータベースからテーブル構造を自動ロードするように指示することができます。

from sqlalchemy import *
from migrate import *
from migrate.changeset import *

meta = MetaData()

user = Table('user', meta,
    Column('id', Integer, primary_key=True),
    Column('email', String(255)),
    Column('first_name', String(40)),
    Column('surname', String(40)),
    Column('password', String(255)),
    Column('user_category', Integer, ForeignKey("user_category.id")),
)

def upgrade(migrate_engine):
    _t = sa.Table('user_category', meta, autoload=True)
    meta.bind = migrate_engine
    user.create()

返事遅れてすみません :)

于 2012-06-14T03:28:31.637 に答える
3

「user_category」テーブルに名前と ID があると主張します。「user_category」の定義には列がまったく含まれていません:)

于 2011-02-13T12:30:35.923 に答える