SQLAlchemy说“表已经存在”,尽管它没有

时间:2013-01-28 00:29:08

标签: python mysql sqlalchemy

我想使用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认为该表在删除后仍然存在,但事实并非如此。但是,如果我尝试查询这个没有现有的表,它会告诉我,该表不存在。

我用Google搜索,但无法找到此行为的解释。我不经常使用SQLAlchemy,所以也许我根本没有深入到它,以了解问题。

无论如何,我很感激能得到一个提示。

我使用 Python 2.7.3 MySQL 5.1.47 SQLAlchemy 0.8.0b2

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

1 个答案:

答案 0 :(得分:1)

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

然而,现在一切正常。