【问题标题】:Python sqlite index out of range error after table drop/add?表删除/添加后Python sqlite索引超出范围错误?
【发布时间】:2011-05-11 19:15:17
【问题描述】:

我有一个围绕 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 语句时。有谁知道这是为什么?

【问题讨论】:

  • 我无法重现你的问题,我得到了:>>> print curs.execute("SELECT * FROM test;").fetchall() [(u'deedle', None)]

标签: python sqlite python-2.5


【解决方案1】:

嗯,它对我来说很好用 [(u'deedle',)] [(u'deedle', None)]

【讨论】:

  • 你的 sqlite3.version 和 sqlite3.sqlite_version 怎么说?我的分别是 2.3.2 和 3.3.6。
  • 2.6.0 和 3.7.5,运行 python 2.7 你应该尝试升级,因为这可能是一个固定的错误。最新版本是 3.7.6.2
  • 啊,好吧,我正在运行 python 2.5,所以这可能是问题所在。我会看看我能做些什么来升级。
猜你喜欢
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 2016-01-06
  • 2014-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多