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