使用sqlite3时出现web.py教程问题

时间:2014-09-01 22:15:15

标签: python sqlite web.py

为了记录,我已经调查了这一点,但似乎无法弄清楚出了什么问题。

所以我在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 ...

制作

谢谢,如果有人可以帮助我!

2 个答案:

答案 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