繁体   English   中英

查询以注释开头时,在python的sqlite3中隐式提交

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM