2014-09-26 23 views
0

如何創建支持方言數據類型的遷移腳本?如何在SQLAlchemy-Migrate中使用方言類型(HSTORE)創建遷移腳本?

這裏有一個模型的例子:

db = SQLAlchemy() 


class Event(db.Model): 
    __tablename__ = 'event' 

    id = db.Column(db.Integer, primary_key=True) 
    created_at = db.Column(db.DateTime, server_default=text('NOW()'), primary_key=True) 
    data = db.Column(HSTORE) 

這裏的錯誤:

Column('data', HSTORE), NameError: name 'HSTORE' is not defined 

附:我用的燒瓶SQLAlchemy的太

遷移腳本:

def migrate(db): 
    repo, uri = get_config(db) 
    migration = repo + '/versions/%03d_migration.py' % (
     api.db_version(uri, repo) + 1) 
    tmp_module = imp.new_module('old_model') 
    old_model = api.create_model(uri, repo) 
    exec old_model in tmp_module.__dict__ 
    script = api.make_update_script_for_model(uri, repo, tmp_module.meta, db.metadata) 
    open(migration, "wt").write(script) 
    api.upgrade(uri, repo) 
    print 'New migration saved as ' + migration 
    print 'Current database version: ' + str(api.db_version(uri, repo)) 

回答

1

遷移腳本不知道在哪裏HSTORE從何而來。你需要從PostgreSQL方言中導入它。在你的遷移頂部放:

from sqlalchemy.dialects.postgresql import HSTORE 
+0

嘣!這是一個男生的錯誤:)我還使用了一個被破壞的自定義腳本......非常感謝 – DiogoNeves 2014-09-26 14:58:50

1

正如@davidism說的,你需要導入HSTORE。

您可以通過執行進口添加到生成的文件:

def migrate(db): 
    extra_imports = 'from sqlalchemy.dialects.postgresql import HSTORE\n' # your imports 
    repo, uri = get_config(db) 
    migration = repo + '/versions/%03d_migration.py' % (
     api.db_version(uri, repo) + 1) 
    tmp_module = imp.new_module('old_model') 
    old_model = api.create_model(uri, repo) 
    exec old_model in tmp_module.__dict__ 
    script = extra_imports + api.make_update_script_for_model(uri, repo, tmp_module.meta, db.metadata) # just add the imports at the top of the migration script. 

    open(migration, "wt").write(script) 
    api.upgrade(uri, repo) 
    print 'New migration saved as ' + migration 
    print 'Current database version: ' + str(api.db_version(uri, repo)) 
相關問題