[英]Python, SQLite3: cursor returns duplicates when a commit intervenes
[英]Implicit commit in python's sqlite3 when query start with comment
我使用sqlite3版本2.6.0 python 2.7。 为什么查询以注释开头('/ * * /'或'-')导致隐式提交?
例。
#!/usr/bin/python
import os
try:
os.remove('db1')
except OSError:
pass
import sqlite3
cur1 = sqlite3.connect('db1').cursor()
cur2 = sqlite3.connect('db1').cursor()
# In first cursor open a transaction
cur1.execute('CREATE TABLE test(t text);')
cur1.execute('BEGIN;')
cur1.execute('INSERT INTO test(t) VALUES (\'123456\');')
# In first cursor first transaction is invisible.
print 'Cursor 1'
print cur1.execute('SELECT * FROM test;').fetchall()
# In second cursor first transaction is invisible.
print 'Cursor 2'
print cur2.execute('SELECT * FROM test;').fetchall()
# In first cursor execute a query, begin with comments.
# Here is implicit commit!
print 'Cursor 1'
print cur1.execute('/* 123 */ SELECT * FROM test;').fetchall()
# In second cursor data now visible!
print 'Cursor 2'
print cur2.execute('SELECT * FROM test;').fetchall()
在开始处带有注释的查询之后,游标cur1隐式提交其更改。 它是错误还是功能?
这是Python 2 sqlite3
绑定中的一个长期错误。 请参阅问题10740 :
作为证明,请注意,现有的语句检测代码已损坏:它不会首先去除注释! 以注释开头的简单SELECT语句将隐式提交!
绑定将在DDL语句之前隐式提交,但是在行以注释开头的情况下,绑定的实现方式也会这样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.