Python Alembic在迁移过程中执行SQL

Python Alembic在迁移过程中执行SQL,python,alembic,flask-migrate,Python,Alembic,Flask Migrate,我希望alembic从DB获取当前存储过程,并将其与代码中的存储过程进行比较。如果它们不同,则更新数据库 我编辑了env.py文件来检查这一点,并生成了原始SQL的升级版本 运行以下命令时: writer=rewriter.rewriter() @编剧重写(ops) def存储过程(上下文、版本、操作): 如果未检测到更改,请执行以下操作: 打印(“未检测到存储过程中的差异。”) 返回操作 其他: 打印(“已存储数据中检测到的差异”) 包\u sql=open(迁移\u文件\u路径,“r”)

我希望alembic从DB获取当前存储过程,并将其与代码中的存储过程进行比较。如果它们不同,则更新数据库

我编辑了env.py文件来检查这一点,并生成了原始SQL的升级版本

运行以下命令时:


writer=rewriter.rewriter()
@编剧重写(ops)
def存储过程(上下文、版本、操作):
如果未检测到更改,请执行以下操作:
打印(“未检测到存储过程中的差异。”)
返回操作
其他:
打印(“已存储数据中检测到的差异”)
包\u sql=open(迁移\u文件\u路径,“r”)
package\u sql=migration\u file.read()
包_sql=''''''''''+包_sql+''''''''''''''
返回[
op,
op.get_bind().execute(package_sql),
]
回溯(最近一次呼叫最后一次):
文件“c:\Project\.vscode\extensions\ms python.python-2019.9.34911\pythonFiles\ptvsd_launcher.py”,第43行,在
干管(ptvsdArgs)
文件“c:\Project\.vscode\extensions\ms python.python-2019.9.34911\pythonFiles\lib\python\ptvsd\\ u_main\u_.py”,第432行,在main中
运行()
文件“c:\Project\.vscode\extensions\ms python.python-2019.9.34911\pythonFiles\lib\python\ptvsd\\uuuuuuu main\uuuuuu.py”,第316行,在run\u文件中
runpy.run\u路径(目标,run\u名称=“”\uu主\uuuuuuuuuuuu')
文件“C:\Project\Programs\Python\Python37\lib\runpy.py”,第263行,在运行路径中
pkg_name=pkg_name,script_name=fname)
文件“C:\Project\Programs\Python\Python37\lib\runpy.py”,第96行,在运行模块代码中
模块名称、模块规格、组件名称、脚本名称)
文件“C:\Project\Programs\Python\Python37\lib\runpy.py”,第85行,在运行代码中
exec(代码、运行\全局)
文件“C:/Project/manage.py”,第15行,在
manager.run()
...
运行迁移中的文件“C:\Project\ENV\lib\site packages\alembic\runtime\migration.py”,第351行
对于介入式自我迁移(头部,自我):
文件“C:\Project\ENV\lib\site packages\alembic\command.py”,第173行,位于retrieve\u migrations中
修订版\上下文。运行\自动生成(修订版,上下文)
文件“C:\Project\ENV\lib\site packages\alembic\autogenerate\api.py”,第433行,在run\u autogenerate中
自运行环境(版本、迁移上下文、真)
文件“C:\Project\ENV\lib\site packages\alembic\autogenerate\api.py”,第483行,在运行环境中
钩子(迁移、修订、自生成修订)
文件“migrations\env.py”,第167行,过程中\u修订\u指令
存储过程(上下文、修订、指令)
存储过程中的第146行文件“migrations\env.py”
op.get_bind().execute(package_sql),
AttributeError:“list”对象没有属性“get\u bind”

您没有为显示的代码提供任何上下文。你能至少包括你得到的错误的完整堆栈跟踪吗?米格尔,我添加了更多信息,谢谢你的帮助。
op
是列表吗?你的意思是“行动”?使用
ops[0]获取一个或第一个元素。获取绑定()
!?在使用之前,只需猜测一下。或者使用
print(dir(op))
调试
op
。重写装饰器只需执行一个操作,例如
ops.AddColumnOp
。您正在通过
ops
。这是有意的吗?您没有为正在显示的代码提供任何上下文。你能至少包括你得到的错误的完整堆栈跟踪吗?米格尔,我添加了更多信息,谢谢你的帮助。
op
是列表吗?你的意思是“行动”?使用
ops[0]获取一个或第一个元素。获取绑定()
!?在使用之前,只需猜测一下。或者使用
print(dir(op))
调试
op
。重写装饰器只需执行一个操作,例如
ops.AddColumnOp
。您正在通过
ops
。这是有意的吗?
Traceback (most recent call last):
  File "c:\Project\.vscode\extensions\ms-python.python-2019.9.34911\pythonFiles\ptvsd_launcher.py", line 43, in <module>
    main(ptvsdArgs)
  File "c:\Project\.vscode\extensions\ms-python.python-2019.9.34911\pythonFiles\lib\python\ptvsd\__main__.py", line 432, in main
    run()
  File "c:\Project\.vscode\extensions\ms-python.python-2019.9.34911\pythonFiles\lib\python\ptvsd\__main__.py", line 316, in run_file
    runpy.run_path(target, run_name='__main__')
  File "C:\Project\Programs\Python\Python37\lib\runpy.py", line 263, in run_path
    pkg_name=pkg_name, script_name=fname)
  File "C:\Project\Programs\Python\Python37\lib\runpy.py", line 96, in _run_module_code
    mod_name, mod_spec, pkg_name, script_name)
  File "C:\Project\Programs\Python\Python37\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:/Project/manage.py", line 15, in <module>
    manager.run()

...

  File "C:\Project\ENV\lib\site-packages\alembic\runtime\migration.py", line 351, in run_migrations
    for step in self._migrations_fn(heads, self):
  File "C:\Project\ENV\lib\site-packages\alembic\command.py", line 173, in retrieve_migrations
    revision_context.run_autogenerate(rev, context)
  File "C:\Project\ENV\lib\site-packages\alembic\autogenerate\api.py", line 433, in run_autogenerate
    self._run_environment(rev, migration_context, True)
  File "C:\Project\ENV\lib\site-packages\alembic\autogenerate\api.py", line 483, in _run_environment
    hook(migration_context, rev, self.generated_revisions)
  File "migrations\env.py", line 167, in process_revision_directives
    stored_procedure(context, revision, directives)
  File "migrations\env.py", line 146, in stored_procedure
    op.get_bind().execute(package_sql),
AttributeError: 'list' object has no attribute 'get_bind'