簡體   English   中英

使用SQLAlchemy-Migrate創建具有外鍵約束的表時出錯

[英]Error creating table with foreign key constraint using SQLAlchemy-Migrate

我在python中構建一個應用程序。 我正在使用sqlalchemy-migrate來跟蹤我的數據庫架構。 我有一個表user_category,它有兩列:id和name。 我正在嘗試使用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'

可以告訴SQLAlchemy從數據庫中自動加載表結構,而不是復制粘貼user_category表的定義:

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()

抱歉回復晚了 :)

您聲稱您的“user_category”表具有名稱和ID。 “user_category”的定義根本不包含任何列:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM