簡體   English   中英

sqlalchemy自動加載orm持久性

[英]sqlalchemy autoloaded orm persistence

我們使用sqlalchemy的自動加載功能來進行列映射,以防止我們的代碼中出現硬編碼。

class users(Base):
    __tablename__ = 'users'
    __table_args__ = {
        'autoload': True,
        'mysql_engine': 'InnoDB',
        'mysql_charset': 'utf8'
    }

有沒有辦法序列化或緩存自動加載的元數據/ orms,所以每次我們需要從其他腳本/函數引用我們的orm類時,我們不必經歷自動加載過程?

我看過燒杯緩存和泡菜,但是如果有可能或怎么做的話,還沒有找到明確的答案。

理想情況下,只有在我們提交了對數據庫結構的更改但是從所有其他腳本/函數引用數據庫映射的非自動加載/持久/緩存版本時,才會運行自動加載映射腳本,

有任何想法嗎?

我現在正在做的是在通過數據庫連接(MySQL)運行反射之后挑選元數據,並且一旦pickle可用,使用pickle元數據來反映具有綁定到SQLite引擎的元數據的模式。

cachefile='orm.p'
dbfile='database'
engine_dev = create_engine(#db connect, echo=True)
engine_meta = create_engine('sqlite:///%s' % dbfile,echo=True)
Base = declarative_base()
Base.metadata.bind = engine_dev
metadata = MetaData(bind=engine_dev)

# load from pickle 
try:
    with open(cachefile, 'r') as cache:
        metadata2 = pickle.load(cache)
        metadata2.bind = engine_meta
        cache.close()
    class Users(Base):
        __table__ = Table('users', metadata2, autoload=True)

    print "ORM loaded from pickle"

# if no pickle, use reflect through database connection    
except:
    class Users(Base):
        __table__ = Table('users', metadata, autoload=True)

print "ORM through database autoload"

# create metapickle
metadata.create_all()
with open(cachefile, 'w') as cache:
    pickle.dump(metadata, cache)
    cache.close()

任何評論,如果這是好的(它的工作)或有什么我可以改善?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM