PRAGMA table_info搞砸了结果集

时间:2015-05-04 12:43:23

标签: python python-3.x sqlite

我有这个脚本:

#!/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

0 个答案:

没有答案