sqlite3.OperationalError: рядом с «create»: синтаксическая ошибка - PullRequest
0 голосов
/ 20 февраля 2020

Я получаю довольно странную синтаксическую ошибку в моем schema.sql файле.

Ошибка выглядит следующим образом:

File "/ Users / user / Documents / GitProjects /FlaskApp/flaskr/db.py ", строка 88, в файле init_db_command init_db ()" /Users/user/Documents/GitProjects/FlaskApp/flaskr/db.py ", строка 80, в файле init_db db.executescript (f.read () .decode ("utf-8")) sqlite3.OperationalError: рядом с "create": синтаксическая ошибка

Моя схема выглядит так:

drop table if exists post;
drop table if exists post_user;

create table post_user (
    user_id integer primary key autoincrement,
    email text unique not null,
    username text unique not null,
    password text not null
);

create table post (
    post_id integer primary key autoincrement,
    author_id integer not null,
    create timestamp not null default current_timestamp,
    title text not null,
    body text not null,
    foreign key (author_id) references post_user (user_id)
);

И мой python выглядит так:

def init_db():
    db = get_db()
    with current_app.open_resource("schema.sql") as f:
        db.executescript(f.read().decode("utf-8"))

И, наконец, каталог:

root
 |--db.py
 |--schema.sql
instance
 |-- project.sqlite

Я использую flask и sqlite3. И мои шаги по устранению неполадок были следующие:

1) Удалите все, кроме первой строки (это работает)

2) Удалили все, кроме первых двух строк (это не так)

3) Удалите файл ./instance/project.sqlite

4) Используйте онлайновый валидатор. Это было особенно интересно, потому что выяснилось, что каждая отдельная команда работает. Но как только я связал два спина к спине, он сказал, что команды были недействительными.

5) Дважды проверил документацию sqlite об удалении таблиц

6) Даже зашел так далеко, что мой .vimrc был установлен на utf-8

Я уверен, что пропустил что-то маленькое здесь, но, похоже, ничего не работает. Любая помощь будет оценена!

Ответы [ 2 ]

2 голосов
/ 20 февраля 2020

Возможно, вы хотите, чтобы столбец create timestamp был похож на create_timestamp, чтобы избежать столкновения с sql ключевыми словами.

0 голосов
/ 20 февраля 2020

Проблема в строке:

create timestamp not null default current_timestamp,

SQLite не поддерживает тип данных отметки времени. Он поддерживает типы данных DATE и DATETIME .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...