gpt4 book ai didi

python - SQLAlchemy 说 "Table already exists"虽然它没有

转载 作者:可可西里 更新时间:2023-11-01 08:50:52 39 4
gpt4 key购买 nike

我想使用 SQLAlchemy ORM 不仅用于查询数据库,还用于创建表。所以我连接到我的数据库的空模式:

engine = create_engine(connection_string)
Base = declarative_base()

我有几个类似于以下示例的类:

class SomeClass(Base):
__tablename__= 'SomeClass'
id = Column(Integer, primary_key=True, auto_increment=True)
name = Column(String(50))

def __init__(self, name):
self.name = name

要创建我调用的数据库:

Base.metadata.create_all(engine)

这工作正常 - 第一次。如果我现在从数据库中手动删除表或调用 Base.metadata.drop_all() 并重新启动脚本(因此再次调用 create_all)我收到一条错误消息,指出我的表已经存在:

sqlalchemy.exc.OperationalError: (OperationalError) (1050, "Table 'someclass' already exists") 

我可以明确地说,这不是真的。我可以使用 CLI 工具中的 CREATE TABLE 创建一个同名表,如果我现在停止数据库守护程序并再次启动它,我能够使用create_all再次创建表。

所以我猜测这与SQLAlchemy 和数据库之间的连接有关。显然,SQLAlchemy 认为我删除该表后该表仍然存在,但事实并非如此。但是,如果我尝试查询这个不存在的表,它会告诉我,该表不存在。

我四处搜索,但未能找到对此行为的解释。我不经常使用 SQLAlchemy,所以也许我对它的了解还不够深入,无法理解这个问题。

无论如何,如果能得到提示,我将不胜感激。

我正在使用 Python 2.7.3MySQL 5.1.47SQLAlchemy 0.8.0b2

PS:使用 Postgres 我从来没有遇到过这样的问题。

最佳答案

我已经通过升级到 MySQL 5.1.66 解决了这个问题。请注意,我不只是升级旧实例,而是从我的系统中完全卸载它并从头开始安装新版本。因此,我仍然无法判断问题是由于我的旧安装配置错误还是仅仅是一个错误。

但是,现在一切正常。

关于python - SQLAlchemy 说 "Table already exists"虽然它没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14553918/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com