Alembic выполняет SQL как часть миграции - PullRequest
1 голос
/ 21 сентября 2019

Я хочу, чтобы alembic получил текущую хранимую процедуру из БД, сравнил ее с той, что в коде.Если они отличаются для обновления БД.

Я отредактировал файл env.py, чтобы проверить это, и сгенерировал версии обновления исходного SQL.

при выполнении следующих действий:


writer = rewriter.Rewriter()
@writer.rewrites(ops)
def stored_procedure(context, revision, op):
    if not change_detected():
        print("did not detect difference in stored procedure.")
        return op
    else:
        print("detected difference in stored")

        package_sql = open(migration_file_path, "r")
        package_sql = migration_file.read()
        package_sql = '"""' + package_sql + '"""'

        return [    
                    op,
                    op.get_bind().execute(package_sql),
        ]

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'
...