3

我想使用 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 和数据库之间的连接有关。Obviosly SQLAlchemy 认为该表在我删除后仍然存在,这是不正确的。但是,如果我尝试查询这个不存在的表,它会告诉我,该表不存在。

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

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

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

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

4

1 回答 1

1

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

但是,现在一切正常。

于 2013-01-28T11:41:22.903 回答