首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我是否应该将数据库连接或游标传递给类

我是否应该将数据库连接或游标传递给类
EN

Stack Overflow用户
提问于 2021-01-25 21:55:16
回答 1查看 179关注 0票数 1

我正在编写一个Python脚本来将数据从生产数据库移动到开发数据库。我使用vertica-python (类似于pyodbc)进行数据库连接,使用airflow进行调度。

该脚本分为两个文件,一个用于DAG,另一个用于实际迁移作业。对于迁移作业中的所有try-except-finally执行函数,我都使用SQL块:

代码语言:javascript
复制
try:
    # autocommit set to False
    # Execute a SQL script
except DatabaseError:
    # Logging information
    # Rollback
finally:
    # autocommit set to False

您可以看到,设置autocommitRollback需要访问连接,执行SQL脚本需要访问游标。当前的解决方案是在DAG中简单地创建两个DB连接,并将它们传递给迁移脚本。但我也从Stackoverflow帖子中读到,我应该只传递光标:

Python, sharing mysql connection in multiple functions - pass connection or cursor?

我的问题是:是否可以仅将cursor从DAG传递到迁移脚本,而仍然保留rollback和设置autocommit的能力

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-25 22:23:19

可以,您可以通过光标更改autocommit设置:

代码语言:javascript
复制
>>> import pyodbc
>>> cnxn = pyodbc.connect("DSN=mssqlLocal")
>>> cnxn.autocommit
False
>>> crsr = cnxn.cursor()
>>> crsr.connection.autocommit = True
>>> cnxn.autocommit
True
>>>

pyodbc还在游标对象上提供了commit()rollback()方法,但请注意,它们会影响由同一连接创建的所有游标,即crsr.rollback()与调用cnxn.rollback()完全相同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65886146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档