【问题标题】:How does one resolve a "Table already exists" error in Flask?如何解决 Flask 中的“表已存在”错误?
【发布时间】:2019-09-24 23:15:14
【问题描述】:

我遇到了一个问题,我真的不知道如何使用 Python Flask。作为参考,我对数据库使用 SQL-Alchemy 和 flask-migrate。那就是说。当我运行命令 flask db upgrade 时,我收到以下错误:“table guilds model already exists”。在使用命令'flask db migrate -m "Guilds Creation Migration"'创建新迁移后,我立即运行了此命令。烧瓶升级命令通常完全按照它说的那样做。引用 flask-migrate 的作者的话:“flask DB migrate 命令不会对数据库进行任何更改,它只是生成迁移脚本。要将更改应用到数据库,必须使用 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)

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

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

【问题讨论】:

    标签: python sqlalchemy alembic


    【解决方案1】:

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

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

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

    解决方案

    __tablename__ = guildmodel 或者 __tablename__ = guild_model

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

    【讨论】:

      猜你喜欢
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 2022-10-06
      • 2015-06-15
      • 1970-01-01
      • 2022-11-05
      • 2022-10-24
      • 2021-02-19
      相关资源
      最近更新 更多