我有这个脚本:
#!/usr/bin/env python3
import sqlite3
conn = sqlite3.connect('sample.dbf')
try:
conn.execute('''DROP TABLE mytable''')
except:
pass
conn.execute('''CREATE TABLE mytable (parentId TEXT, childId TEXT)''')
conn.execute('''INSERT INTO mytable VALUES('A', 'B')''')
conn.execute('''INSERT INTO mytable VALUES('C', 'D')''')
c1 = conn.cursor()
c1.execute('''SELECT * FROM mytable''')
#c2 = conn.cursor()
#c2.execute('''PRAGMA table_info(mytable)''')
for row in c1:
print(row)
输出符合预期:
('A', 'B')
('C', 'D')
但是,如果我在从第一个游标迭代结果集之前重新添加两个注释行来读取表信息,我得
('A', 'B')
('A', 'B')
('C', 'D')
游标不应该独立吗?为什么PRAGMA table_info
语句会破坏第一个查询的结果集?看起来像sqlite中的一个bug给我,但也许我也错过了一些东西......
版本是sqlite3 2.6.0,在Python 3.4.2上使用SQLite运行时3.8.3.1