如何解决 Flask 中的 "Table already exists" 错误?

How does one resolve a "Table already exists" error in Flask?

我遇到了一个问题,我真的不知道如何使用 Python Flask 来解决。作为参考,我正在为数据库使用 SQL-Alchemy 和 flask-migrate。就是说。我收到以下错误:"table guilds model already exists" 当我 运行 命令 flask db upgrade 时。在使用命令“flask db migrate -m "Guilds Creation Migration"”创建新迁移后,我立即有 运行 这个命令。 flask upgrade 命令通常完全按照它说的做。引用写 flask-migrate "The flask DB migrate command does not make any changes to the database, it just generates the migration script. To apply the changes to the database, the flask DB upgrade command must be used." 的人的话在 models.py 文件中,用于生成它所引用的 table 的代码如下:

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)

我不知道如何解决这个问题或导致它的原因。我为解决这个问题所做的搜索并没有真正返回任何东西。非常感谢任何帮助

(Ps: 我使用的数据库是SQLite)

我今天正要post类似的查询!但是一些实验让我找到了原因。 这是因为 flask-sqlalchemy 或 flask-migrate 是如何工作的。 这都是因为我们(是的,即使我犯了类似的错误)如何定义 class 和 table 名称。

作为解决方案,您可以使用 __tablename__ = GuildModel(即使没有用也会产生相同的影响) 但即使这样也会产生问题,因为 sqlalchemy 的默认性质和迁移 woks,它将 table 名称转换为 guild_model

再次在新迁移上它没有找到 GuildModel 并为其创建新迁移,但是在升级时它给出了问题,因为这里 class 的转换和默认事物遇到它的存在。

解决方案

__tablename__ = guildmodel 要么 __tablename__ = guild_model

使用完整的小案例名称。不要使用大写字母。它确实解决了我的问题,因为我使用了 __tablename__ 但字符串之间有大写字母,这造成了问题,摆脱它使它对我有用。 这完全是关于图书馆在其命名约定中的工作方式。