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

2024-09-29 17:22:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,我真的不知道如何使用Python Flask。作为参考,我使用sqlalchemy和flask migrate作为数据库。那就是说。当我运行flask db upgrade命令时,我得到以下错误:“table guilds model already exists”。我用命令flask db migrate-m“Guilds Creation migration”'创建新迁移后立即运行此命令。flask upgrade命令通常与它所说的完全一致。引用编写flask migrate的人的话:“flask DB migrate命令不会对数据库进行任何更改,它只是生成迁移脚本。要将更改应用于数据库,必须使用flask DB upgrade命令模型.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)


Tags: 命令self数据库trueflaskdbstringsqlalchemy
2条回答

这个问题似乎可以通过多种方式解决。在我的例子中,我只创建了一个单一的数据库迁移。这个网站也只是在测试阶段,所以帖子是完全不重要的。整个数据库也是如此。所以我的解决方案很简单,删除migrations文件夹和数据库。这就解决了这个问题。我还不太确定是什么引起了这个问题。然而,这是非常解决的。在

我今天正要发布类似的问题!但一些实验让我明白了原因。 这是因为flask sqlalchemy或flask migrate是如何工作的。 这完全是因为我们如何定义类和表名(是的,甚至我也犯了类似的错误)。在

作为一种解决方案,您可以使用__tablename__ = GuildModel(即使它也会产生同样的影响而没有用处) 但即使这样做也会造成sqlalchemy和migratewoks的默认属性问题,它也会将表名转换为guild_model

同样,在新迁移中,它没有找到GuildModel并为其创建新的迁移,但是在升级过程中,它会出现类和默认的转换遇到它存在的问题。在

解决方案

__tablename__ = guildmodel__tablename__ = guild_model

使用完整的小写字母。不要使用大写。它确实解决了我的问题,因为我使用了__tablename__,但是字符串的大小写都是大写的,去掉它就可以让它为我工作。 这是关于库如何在其命名约定中工作的。在

相关问题 更多 >

    热门问题