3
根据THIS针对某些DBMS的问题,可能会回滚CREATE TABLE语句。 声明它可能为sqlite(尽管它是无证的)。是否可以在sqlalchemy中回滚create_all?
所以我的问题是,是否可以在sqlalchemy中回滚create_all? 我试图写一些测试代码,但它似乎没有工作:
>>> engine = create_engine('sqlite:///:memory:')
>>> engine
Engine(sqlite:///:memory:)
>>> Session = sessionmaker(bind=engine)
>>> connection = engine.connect()
>>> session = Session(bind=connection)
>>> engine.table_names()
[]
>>> transaction = connection.begin()
>>> Base = declarative_base()
>>> class Test(Base):
... __tablename__ = 'TEST'
... id = Column(Integer, primary_key=True)
...
>>> Base.metadata.bind = engine
>>> Base.metadata.create_all()
>>> engine.table_names()
[u'TEST']
>>> transaction.rollback()
>>> session.close()
>>> connection.close()
>>> engine.table_names()
[u'TEST']
谢谢您的回答。准确地说,我确实知道你已经提到过的引擎是可能的。正如我正确理解你的答案意味着:这是不可能在SQLAlchemy。 (因为它可以在sqlite客户端回滚创建表 - sqlite3)。那是对的吗? – 2013-03-30 14:30:28
编辑。它是sqlite3驱动程序,它具有上述问题以及其他未解决的问题(http://bugs.python.org/issue9924)有关其处理事务状态的问题。 – zzzeek 2013-03-30 18:17:45