Python 在SQLAlchemy中创建外键失败
我希望每个用户都有一个名为allocatedstorage和availablestorage的值。这两个值存储在另一个表中。但是,当我创建以下数据库时,它显示了以下错误。我做错了什么?谢谢你的帮助Python 在SQLAlchemy中创建外键失败,python,mysql,database,sqlalchemy,flask-sqlalchemy,Python,Mysql,Database,Sqlalchemy,Flask Sqlalchemy,我希望每个用户都有一个名为allocatedstorage和availablestorage的值。这两个值存储在另一个表中。但是,当我创建以下数据库时,它显示了以下错误。我做错了什么?谢谢你的帮助 class User(UserMixin, db.Model): __tablename__ = 'user' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(15), un
class User(UserMixin, db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(15), unique=True)
email = db.Column(db.String(50), unique=True)
password = db.Column(db.String(80))
role= db.Column(db.String(20));
usersessiontoken = db.Column(db.String(500), unique=True)
hasstorage = db.Column(db.Integer, db.ForeignKey('storageinformation.allocatedstorage'))
hasavailablestorage = db.Column(db.Integer, db.ForeignKey('storageinformation.availablestorage'))
storageinformation = db.relationship('StorageInformation', backref='user')
class StorageInformation(UserMixin, db.Model):
__tablename__ = 'storageinformation'
id = db.Column(db.Integer, primary_key=True)
allocatedstorage = db.Column(db.Integer)
availablestorage = db.Column(db.Integer)
错误:
sqlalchemy.exc.IntegrityError: (pymysql.err.IntegrityError) (1215, 'Cannot add foreign key constraint') [SQL: '\nCREATE TABLE user (\n\tid INTEGER NOT NULL AUTO_INCREMENT, \n\tusername VARCHAR(15), \n\temail VARCHAR(50), \n\tpassword VARCHAR(80), \n\t`role` VARCHAR(20), \n\tusersessiontoken VARCHAR(500), \n\thasstorage INTEGER, \n\thasavailablestorage INTEGER, \n\tPRIMARY KEY (id), \n\tUNIQUE (username), \n\tUNIQUE (email), \n\tUNIQUE (usersessiontoken), \n\tFOREIGN KEY(hasstorage) REFERENCES storageinformation (allocatedstorage), \n\tFOREIGN KEY(hasavailablestorage) REFERENCES storageinformation (availablestorage)\n)\n\n']
在我的例子中,迁移命令的输出中没有显示实际原因
只有在数据库控制台中运行相同的命令,我才能发现问题
命令是
ALTER TABLE assignment ADD FOREIGN KEYsession_id引用电池会话_id
实际问题
创建具有外键约束的表“db_name/sql-5f9_11e”失败。引用的表中没有索引,其中引用的列显示为第一列。
无法添加外键约束
MySQL需要外键和引用键的索引,以便
外键检查可以很快,不需要扫描表。在
引用表时,必须有外键所在的索引
列按相同顺序列为第一列
InnoDB允许外键引用任何索引列或索引组
柱。但是,在引用的表中,必须有一个索引
其中引用的列列列为列表中的第一列
同样的顺序
有两列试图引用外键列,但两列都不是键。是否要添加单个外键列,例如storageinformation\u id=db.Columndb.Integer,db.ForeignKey'storageinformation.id'?可能重复