Python 在SQLAlchemy中创建外键失败

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

我希望每个用户都有一个名为allocatedstorage和availablestorage的值。这两个值存储在另一个表中。但是,当我创建以下数据库时,它显示了以下错误。我做错了什么?谢谢你的帮助

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'?可能重复