我正在编写一个Python脚本,将数据从生产数据库移动到开发数据库。我使用vertica-python
(类似于pyodbc
)进行数据库连接,使用airflow
进行调度
脚本分为两个文件,一个用于DAG,另一个用于实际迁移作业。我对迁移作业中的所有SQL执行函数使用try-except-finally
块:
try:
# autocommit set to False
# Execute a SQL script
except DatabaseError:
# Logging information
# Rollback
finally:
# autocommit set to False
您可以看到设置autocommit
和Rollback
需要访问连接,执行SQL脚本需要访问游标。当前的解决方案是简单地在DAG中创建两个DB连接,并将它们传递给迁移脚本。但我也从Stackoverflow的帖子上读到,我应该只传递光标:
Python, sharing mysql connection in multiple functions - pass connection or cursor?
我的问题是:是否可以只将cursor
从DAG传递到迁移脚本,并且仍然保留rollback
和设置autocommit
的功能
是的,您可以通过光标更改
autocommit
设置:pyodbc还为Cursor对象提供了commit()和rollback()方法,但请注意它们会影响由同一连接创建的所有游标,即
crsr.rollback()
与调用cnxn.rollback()
完全相同相关问题 更多 >
编程相关推荐