如何解决Flask中的“表已存在”错误?

时间:2018-07-14 20:11:24

标签: python sqlalchemy alembic

我遇到了一个问题,我真的不知道如何使用Python Flask。作为参考,我将SQL-Alchemy和flask-migrate用于数据库。那就是。我运行命令flask db upgrade时收到以下错误:“表公会模型已存在”。使用命令'flask db migration -m“ Guilds Creation Migration”'创建新迁移后,我立即运行了此命令。 flask upgrade命令通常会完全按照其说明进行操作。引用写flask-migrate的人的话:“ flask DB migration命令不会对数据库进行任何更改,它只是生成迁移脚本。要将更改应用于数据库,必须使用flask DB upgrade命令。”在models.py文件中,用于生成其引用的表的代码如下:

class GuildModel(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    GuildName = db.Column(db.String(300), index=True, unique=True)
    GuildDescription = db.Column(db.String(64))

    def __repr__(self):
        return '<Guild {}>'.format(self.GuildName)

我不知道如何解决此问题或导致此问题的真正想法。我为解决该问题而进行的搜索并没有真正返回任何结果。任何帮助将不胜感激

(注:我正在使用的数据库是SQLite)

2 个答案:

答案 0 :(得分:0)

我今天要发布类似的查询!但是一些实验使我明白了原因。 这是因为flask-sqlalchemy或flask-migrate如何工作。 这是因为我们(是的,即使我也犯了类似的错误)如何定义类和表名。

作为解决方案,您可以使用__tablename__ = GuildModel(即使不使用也会产生相同的影响) 但是即使这样做也会产生问题,如sqlalchemy的默认性质并迁移炒锅,它将表名转换为guild_model

再次进行新迁移时,它不会找到GuildModel并为其创建新迁移,但是在升级时,它会带来问题,因为在这里,类和默认事物的转换遇到了它的存在。

解决方案

__tablename__ = guildmodel 要么 __tablename__ = guild_model

使用完整的小写字母名称。请勿使用大写字母。它确实解决了我的问题,因为我使用了__tablename__,但是字符串之间存在大写字母,从而产生了问题,摆脱掉它可以为我工作。 有关库如何按照其命名约定工作的所有信息。

答案 1 :(得分:-1)

这个问题似乎可以通过多种方式解决。就我而言,我只创建了一个单一数据库迁移。该网站也仅处于测试阶段,因此帖子完全不重要。就像整个数据库一样。所以我的解决方案很简单,删除迁移文件夹和数据库。这解决了问题。我仍然不太确定是什么引起了问题。但是,这已经解决了。