在Windows上执行此操作时(sqlite3.version为2.6.0,sqlite3.sqlite_version为3.23.1):
import sqlite3, datetime
db = sqlite3.connect(':memory:', detect_types=sqlite3.PARSE_DECLTYPES)
c = db.cursor()
c.execute('CREATE TABLE mytable (id integer, date timestamp)')
c.execute('INSERT INTO mytable VALUES (1, ?)', (datetime.datetime(2018,1,1,12,11,29),))
c.execute('CREATE INDEX id1 ON mytable(JULIANDAY(date))')
它的工作原理(在JULIANDAY(date)
而不是在date
上设置INDEX的事实很有用,因为question+answer}。
在Linux上做同样的事情(sqlite3.version是2.6.0,sqlite3.sqlite_version是3.8.2)时,我得到:
sqlite3.OperationalError: near "(": syntax error
在此版本的JULIANDAY(date)
上创建了一个INDEX吗?
答案 0 :(得分:3)
根据the documentation,在SQLite 3.9.0中引入了在表达式上创建索引的能力 - 因此您将无法在Linux机器上安装的3.8.2版本中使用它。