为了记录,我已经调查了这一点,但似乎无法弄清楚出了什么问题。
所以我在web.py上做教程,然后进入数据库部分(可以完成上面的所有操作)。我想出于各种原因使用sqlite3。因为我无法弄清楚在哪里输入
sqlite3 test.db
行,我查看了sqlite3模块,并用它创建了一个数据库。代码是:
import sqlite3
conn = sqlite3.connect("test.db")
print("Opened database successfully");
conn.execute('''CREATE TABLE todo
(id serial primary key,
title text,
created timestamp default now(),
done boolean default 'f');''')
conn.execute("INSERT INTO todo (title) VALUES ('Learn web.py')");
但我收到了错误
done boolean default'f');''') sqlite3.OperationalError:接近“(”:语法错误
我已经尝试过这个,但无法弄清楚我的生活是什么问题。
我没有幸运的其他数据库(这是新的,所以不确定微妙),我不能直接制作sqlite数据库所以它可能是一个python的东西,但它匹配测试人员.py我用sqlite with python tutorial ...
制作谢谢,如果有人可以帮助我!
答案 0 :(得分:1)
导致错误的问题是您无法在此处使用MySQL now()函数。尝试改为
created default current_timestamp
这有效:
conn.execute('''CREATE TABLE todo
(id serial primary key,
title text,
created default current_timestamp,
done boolean default 'f');''')
答案 1 :(得分:0)
您正在使用SQLite,但是正在从其他一些数据库引擎中指定数据类型。 SQLite只接受INT,TEXT,REAL,NUMERIC和NONE。布尔很可能被映射到其中一个数字类型,因此DEFAULT 'F'
不是有效的语法(虽然我认为它不会在任何版本的SQL中有效 支持BOOLEAN作为数据类型,因为它们通常使用INTEGER作为底层存储。)
使用SQLite数据类型和允许的默认值重写CREATE TABLE语句,您的代码应该可以正常工作。
关于(有点不寻常的)SQLite类型系统的更多细节:http://www.sqlite.org/datatype3.html