首页 > 解决方案 > sql-alchemy sqlite 数据库问题,不允许我创建外键

问题描述

这是我的代码:

class usersTable(db.Model):
    userid = db.Column(db.Integer, primary_key=True)
    fname = db.Column(db.String, nullable=False)
    lname = db.Column(db.String, nullable=False)
    email = db.Column(db.LargeBinary, unique=True, nullable=False)
    username = db.Column(db.LargeBinary, unique=True, nullable=False)
    password = db.Column(db.LargeBinary, nullable=False)
    joined = db.Column(db.Date, nullable=False)
    subuser = db.relationship('subuserTable', backref='userid')

class subuserTable(db.Model):
    userid = db.Column(db.Integer, db.ForeignKey('usersTable.userid'))
    subid = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.LargeBinary, unique=True, nullable=False)
    password = db.Column(db.LargeBinary, nullable=False)
    fname = db.Column(db.String, nullable=False)
    lname = db.Column(db.String, nullable=False)
    admin = db.Column(db.Boolean, default=False)

问题是每当我尝试运行时:

db.create_all()

我遇到了这个错误:

sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'subuser_table.userid' could not find table 'usersTable' with which to generate a foreign key to target column 'userid'

我知道有一张usersTable桌子,也有userid柱子,为什么它让我这么难过?

标签: pythonsqliteflasksqlalchemyflask-sqlalchemy

解决方案


改变这个:

userid = db.Column(db.Integer, db.ForeignKey('usersTable.userid'))

userid = db.Column(db.Integer, db.ForeignKey('users_table.userid'))

来自 Flask SQLAlchemy文档

SQLAlchemy 中需要的一些部分在 Flask-SQLAlchemy 中是可选的。例如,除非被覆盖,否则会自动为您设置表名。它派生自转换为小写的类名,并将“CamelCase”转换为“camel_case”。要覆盖表名,请设置tablename类属性。


推荐阅读