1
我正在嘗試使用sqlalchemy table.create和sqlalchemy-migrate table.rename方法對數據庫進行一些數據庫模式更改,並在select語句中加入了一些插入。我想在交易中包裝所有這些。我無法弄清楚如何做到這一點。這是我的嘗試:如何在事務中包裝create和sqlalchemy-migrate alter statments
engine = sqlalchemy.engine_from_config(conf.local_conf, 'sqlalchemy.')
trans = engine.connect().begin()
try:
old_metatadata.tables['address'].rename('address_migrate_tmp', connection=trans)
new_metatadata.tables['address'].create(connection=trans)
except:
trans.rollback()
raise
else:
trans.commit()
但有錯誤:
AttributeError: 'RootTransaction' object has no attribute '_run_visitor'
(我嘗試使用SQLAlchemy的,遷移column.alter(NAME = 'NEWNAME'),但錯誤,並不起作用在交易中,所以我的分貝處於破碎狀態,我還需要重命名多個列,因此我決定推出自己的代碼。)
你必須記得在最後調用conn.close()。如果你不這樣做,那麼一旦你引入了超過10次的遷移(我認爲這是sqlalchemy在內部用於池大小的限制)腳本,那麼你的升級腳本會間歇性地掛起,因爲它會被阻塞,等待數據庫連接池,但只有在極少數情況下,當python的GC沒有機會踢你並關閉現有的連接。 – DXM