查询以comment开头时,python sqlite3中的隐式提交

时间:2015-03-03 17:42:46

标签: python sqlite

我使用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隐式提交其更改。这是一个错误还是一个功能?

1 个答案:

答案 0 :(得分:1)

这是Python 2 sqlite3绑定中的一个长期存在的错误。见issue 10740

  

作为证据,请注意现有的语句检测代码已被破坏:它不会先删除注释!注释之前的简单SELECT语句将隐式提交!

绑定将在DDL语句之前隐式提交,但是实现它的方式,当一行以注释开头时,它这样做。