python – 以编程方式获取Alembic数据库版本
发布时间:2020-12-20 11:36:11 所属栏目:Python 来源:网络整理
导读:我正试图弄清楚如何使用Alembic获取我的数据库版本.我已经将数据库设置为使用alembic并成功执行了升级和降级.我现在想从我自己的 python脚本中获取此版本. 我试图创建一个这样做的功能 def get_current_database_version(): path = os.path.join(os.path.dir
我正试图弄清楚如何使用Alembic获取我的数据库版本.我已经将数据库设置为使用alembic并成功执行了升级和降级.我现在想从我自己的
python脚本中获取此版本.
我试图创建一个这样做的功能 def get_current_database_version(): path = os.path.join(os.path.dirname(__file__),os.path.pardir) alembic_cfg = Config(os.path.join(path,'alembic.ini')) current_rev = command.current(alembic_cfg,head_only=True) return current_rev 此函数返回NoSectionError:No section:’formatters’ 然后我去了我的alembic.ini文件,检查它是否有格式化区域.这是我的alembic.ini文件: # A generic,single database configuration. [alembic] # path to migration scripts script_location = alembic pyramid_config_file = ../../development.ini # template used to generate migration files # file_template = %%(rev)s_%%(slug)s # max length of characters to apply to the # "slug" field #truncate_slug_length = 40 # set to 'true' to run the environment during # the 'revision' command,regardless of autogenerate # revision_environment = false # set to 'true' to allow .pyc and .pyo files without # a source .py file to be detected as revisions in the # versions/ directory # sourceless = false sqlalchemy.url = sqlite:///%(here)s/mgo.sqlite # Logging configuration [loggers] keys = root,sqlalchemy,alembic [handlers] keys = console [formatters] keys = generic [logger_root] level = WARN handlers = console qualname = [logger_sqlalchemy] level = WARN handlers = qualname = sqlalchemy.engine [logger_alembic] level = INFO handlers = qualname = alembic [handler_console] class = StreamHandler args = (sys.stderr,) level = NOTSET formatter = generic [formatter_generic] format = %(levelname)-5.5s [%(name)s] %(message)s datefmt = %H:%M:%S 谁知道我做错了什么?谢谢 编辑: 这是我尝试使用MigrationContext来解决问题: def get_database_revision(): engine = create_engine("sqlite:///../mgo.db") conn = engine.connect() context = MigrationContext.configure(conn) current_rev = context.get_current_revision() return current_rev 它连接但没有返回.使用sqlite浏览器我可以看到数据库中的版本未设置为none. 解决方法
您可以将MigrationContext用于
get the current version:
from alembic.migration import MigrationContext from sqlalchemy import create_engine engine = create_engine("postgresql://mydatabase") conn = engine.connect() context = MigrationContext.configure(conn) current_rev = context.get_current_revision() 在env.py中你可以使用: from alembic import context migration_context = context.get_context() current_rev = context.get_current_revision() 最后,它基本上归结为连接到数据库并查看alembic_version表.它包含迁移版本作为值,这是数据库当前所在的位置(根据alembic).所以你可以用你想要的任何方式编写代码,只要这最终你正在做什么. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |