繁体   English   中英

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

[英]Issue with the web.py tutorial when using sqlite3

作为记录,我已经对此进行了调查,但似乎无法弄清楚出了什么问题。

因此,我正在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')");

但是我得到了错误

完成的布尔默认值'f');''')sqlite3.OperationalError:靠近“(”:语法错误

我曾尝试调查此问题,但无法确定问题的根源。

我还没有与其他数据库(这是新事物,所以不能确定细节)之间的运气,我无法直接制作sqlite数据库,因此它可能是python的东西,但它与tester.py匹配用sqlite用sqlite制作的教程 ...

谢谢任何人能帮助我!

导致该错误的问题是您不能在此处使用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');''')

您正在使用SQLite,但正在从其他数据库引擎指定数据类型。 SQLite仅接受INT,TEXT,REAL,NUMERIC和NONE。 布尔是最有可能被映射到数字类型之一,因此DEFAULT 'F'是无效的语法(虽然我不认为这将是在SQL中的任何版本支持布尔的数据类型有效的,因为它们一般使用基础存储的INTEGER)。

使用SQLite数据类型和允许的默认值重写CREATE TABLE语句,您的代码应该可以正常工作。

有关(某些不寻常的)SQLite类型系统的更多详细信息: http : //www.sqlite.org/datatype3.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM