0
我們將SQLAlchemy與postgres結合使用,我試圖切換我正在動態處理的postgres模式,以便每個後續的sql命令都考慮到新的模式。我們正在使用一個聲明式基本模型,並且我正在努力使表類在需要時切換它們的模式。如何交換sqlalchemy元數據的postgres模式屬性
做
sa_metadata.schema = 'new_schema'
for table in sa_metadata.tables.keys():
table.metadata = 'new_schema'
一些Postgres的對象不正常工作(序列,枚舉)擁有自己的模式屬性,我不想循環表中的每個對象在更改架構。我看着Table.tometadata,但未能正確使用。
有人知道這種東西是否可能?或者我有兩個模式在每個表中都有相同的表是愚蠢的嗎?
編輯:
所以基本上我需要重新創建元數據和與之相關聯的新表。問題是我所有的表定義都在另一個在導入時讀取的python文件中。一些含有:
SaBaseClass = declarative_base()
SaBaseClass.schema = settings.DB.schema
TableA(SaBaseClass):
__tablename__ = 'leg'
id = Column(Integer, primary_key=True)
col = Column(Enum('a', 'b', 'c', inherit_schema=True))
在此基礎上,我怎樣才能確保已進口TableA的所有其他Python模塊使用的是正確的模式,每當我想改變整個元數據的架構?
那我做了什麼,但是當我對ORM一部分工作,我無法理解了它... – cp2587 2014-09-19 14:23:15
有沒有現在的簡單方法將所有類重新映射到不同的模式。這可以更好地處理在使用數據庫時發生的上下文,這是由即將發佈的功能解決的。目前,您最好的辦法是不要使用架構,在使用模型時,請設置[搜索路徑](http://www.postgresql.org/docs/9.1/static/ddl-schemas.html#DDL- SCHEMAS-PATH)在您使用的引擎或與會話一起使用的連接上。 – zzzeek 2014-09-19 18:26:38