我有一个围绕 sqlite3 模块编写的包装器,它可以让我序列化来自多个线程的访问。它还允许我在更改表定义时自动迁移表。我注意到当我删除一个表并用更多列重新添加它时,我得到一个索引超出范围错误。像这样的东西:
conn = sqlite3.connect("test.db", detect_types=sqlite3.PARSE_COLNAMES)
curs = conn.cursor()
curs.execute("CREATE TABLE test (derp TEXT);"); conn.commit()
curs.execute("INSERT INTO test (derp) VALUES ('deedle');"); conn.commit()
print curs.execute("SELECT * FROM test;").fetchall()
curs.execute("DROP TABLE test;"); conn.commit()
curs.execute("CREATE TABLE test (derp TEXT, val REAL);"); conn.commit()
curs.execute("INSERT INTO test (derp) VALUES ('deedle');"); conn.commit()
print curs.execute("SELECT * FROM test;").fetchall()
conn.close()
将打印这个:
[(u'deedle',)] Traceback (most recent
call last): File "test.py", line 23,
in <module>
print curs.execute("SELECT * FROM test;").fetchall() IndexError: list
index out of range
执行第二个 SELECT 语句时。有人知道为什么是这样吗?