Pyodbc确定是否有任何事务处于挂起状态并且需要提交

2024-09-27 22:40:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用pyodbc,并将“autocommit”设置为false。 我假设如果只使用SELECTsql语句(不使用INSERT或{}),那么对“commit”函数的调用不会对数据库产生任何影响。在

在pyodbc中有什么方法可以确定如果我不调用'commit'是否有任何挂起的更改会丢失?在

我一直在考虑使用pyodbc'getinfo'函数,它是SQLGetInfo的包装器,但找不到合适的参数。在

实际上,我想做的只是通知用户数据库中的数据将被更改,但我不想控制使用了哪些SQL语句(只有SELECTUPDATE&;INSERT),因为我需要检查的地方太多了。在


Tags: 数据方法函数用户数据库false参数语句
1条回答
网友
1楼 · 发布于 2024-09-27 22:40:04

不幸的是,pyodbc没有检查挂起的提交的内置函数。

在SQL Server(从2008开始)中,可以使用sys.dm_tran_database_transactions表中的database_transaction_state字段检查数据库级别的挂起提交。具有挂起提交的事务的状态应为4。而没有挂起提交的一个应该是3

根据documentation,上述状态定义为:

3 = The transaction has been initialized but has not generated any log records.

4 = The transaction has generated log records.

下面的脚本验证了这个想法。

输出

Starting point, no pending transaction or commits
    @@TRANCOUNT = 0
    database_transaction_state = None
Disable autocommit
    @@TRANCOUNT = 1
    database_transaction_state = 3
Perform an Insert
    @@TRANCOUNT = 1
    database_transaction_state = 4
Explicit commit
    @@TRANCOUNT = 1
    database_transaction_state = 3
Enable autocommit
    @@TRANCOUNT = 0
    database_transaction_state = None

编码

^{pr2}$

相关问题 更多 >

    热门问题