war*_*iuc 5 python mysql mysql-python
我在文档中读到:
...因为事务在游标执行查询时开始,但在Connection对象执行COMMIT或ROLLBACK时结束.
import MySQLdb
db = MySQLdb.connect(user="root", db="test")
c = db.cursor()
c.execute("SELECT * FROM books")
print c.fetchall()
Run Code Online (Sandbox Code Playgroud)
我怀疑MySQLdb甚至在不修改数据的查询(如SELECT)上启动事务,因为很难知道查询是否只读取数据而不写入数据.
cursor.commit()在每次查询后执行,以确保没有表被锁定?谢谢
是的,SELECT声明与其他声明一样,因此事务开始。
如果你想避免这种情况,你可以这样做:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
SELECT * FROM books ;
COMMIT ;
Run Code Online (Sandbox Code Playgroud)
详细地:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
Run Code Online (Sandbox Code Playgroud)
表示以下指令可以读取已修改但尚未收到的行COMMIT。这种事务不会获得独占锁。
第二部分SELECT * FROM books ;显然是a SQL statement,第三部分COMMIT ;结束交易并使其“永久”。在这种情况下,不会执行任何写入操作,因此COMMIT仅用于结束事务并且
| 归档时间: |
|
| 查看次数: |
1218 次 |
| 最近记录: |