首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SQLAlchemy-Migrate创建带有外键约束的表时出错

使用SQLAlchemy-Migrate创建带有外键约束的表时出错
EN

Stack Overflow用户
提问于 2011-02-10 05:58:30
回答 2查看 2.9K关注 0票数 3

我正在用python构建一个应用程序。我正在使用sqlalchemy-migrate来跟踪我的数据库模式。我有一个表user_category,它有两列: id和name。我正在尝试创建一个用户表,其中包含指向user_category表的外键。我创建用户表的更改脚本如下:

代码语言:javascript
复制
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测试‘时,我得到了错误:

代码语言:javascript
复制
sqlalchemy.exc.NoReferencedColumnError: Could not create ForeignKey 'user_catego
ry.id' on table 'user': table 'user_category' has no column named 'id'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-13 20:30:36

您声称您的"user_category“表有名称和id。"user_category“的定义根本不包含任何列:)

票数 2
EN

Stack Overflow用户

发布于 2012-06-14 11:28:32

可以告诉SQLAlchemy从数据库自动加载表结构,而不是复制粘贴user_category表的定义:

代码语言:javascript
复制
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()

很抱歉回答得太晚了:)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4951013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档