我想使用 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.3和MySQL 5.1.47和SQLAlchemy 0.8.0b2
PS:使用 Postgres 我从来没有遇到过这样的问题。