2014-09-01 2 views
0

Для записи я изучил это, но не могу понять, что не так.Проблема с помощью руководства web.py при использовании 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')"); 

, но я получаю ошибку

done boolean default 'f');''') sqlite3.OperationalError: near "(": syntax error

Я пытался смотреть в это, но не могу понять, за жизнь мне, что проблема есть.

Мне не повезло с другими базами данных (новинкой в ​​этом, поэтому не уверен в тонкостях), я не смог просто сделать базу данных sqlite напрямую, чтобы она могла быть питонной, но она соответствует tester.py Я сделал с sqlite with python tutorial ...

Спасибо, если кто-нибудь может мне помочь!

ответ

0

Вы используете SQLite, но задаете типы данных из другого механизма базы данных. SQLite принимает только INT, TEXT, REAL, NUMERIC и NONE. Boolean, скорее всего, сопоставляется с одним из типов номеров, и поэтому DEFAULT 'F' недопустим синтаксис (хотя я не думаю, что он был бы прав в любой версии SQL, который делает поддерживает BOOLEAN как тип данных, так как они обычно используют INTEGER для базового хранилища).

Перепишите инструкцию CREATE TABLE с использованием типов данных SQLite и допустимых значений по умолчанию, и ваш код должен работать нормально.

Более подробная информация о (несколько необычной) системы типа SQLite: http://www.sqlite.org/datatype3.html

+0

Спасибо, я нашел заявления по умолчанию были неправильными, а также. Устранение их устранило проблему; Я отредактирую вопрос, если я не могу заставить их работать в ближайшее время – Matthew

1

Проблема вызывает ошибку в том, что вы не можете использовать MySQL в настоящее время() функцию здесь. Попробуйте вместо

created default current_timestamp 

Это работает:

conn.execute('''CREATE TABLE todo 
    (id serial primary key, 
    title text, 
    created default current_timestamp, 
    done boolean default 'f');''')