sqlite3.OperationalError: возле "index": синтаксическая ошибка - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь подключиться к базе данных с python, используя модуль sqlite3, и я получаю сообщение об ошибке - sqlite3.OperationalError: около "index": синтаксическая ошибка


Я искал некоторые решения для этого, но я не получил решение.Я новичок в sqlite3


def insert_into_db(url, title, description, keywords):
    con = sqlite3.connect('index.db')
    c = con.cursor()
    create = r'''CREATE TABLE IF NOT EXISTS index (id INTEGER NOT NULL AUTO_INCREMENT,url VARCHAR,description TEXT,keywords TEXT);INSERT INTO index(url, title, description, keywords)VALUES('{}','{}',{}','{}');'''.format(url, title,description, keywords)
    c.execute(create)
    con.commit()
    con.close()

помогите мне избавиться от этой ошибки : (

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

INDEX - это ключевое слово в SQLite3.Таким образом, он будет проанализирован как ключевое слово.Однако есть несколько способов обойти это.

Согласно документации , вы можете использовать обратные кавычки или кавычки, чтобы указать его в качестве имени таблицы.Например,

CREATE TABLE IF NOT EXISTS `index` ...

или

CREATE TABLE IF NOT EXISTS "index" ...

могут работать.

Вы можете передавать аргументы в оператор SQL из команды execute().Таким образом,

create = r'''CREATE TABLE ... VALUES(?,?,?,?);'''  # use ? for placeholders
c.execute(create, (url, title, description, keywords))  # pass args as tuple

Это более безопасно по сравнению с форматированием ваших аргументов непосредственно с помощью Python.

Обратите также внимание, что синтаксис SQLite для autoinc - это AUTOINCREMENT без подчеркивания, и для них требуется полетакже быть INTEGER PRIMARY KEY.

0 голосов
/ 25 декабря 2018

Вы не можете назвать таблицу index.INDEX является зарезервированным ключевым словом.

Документация гласит:

Стандарт SQL определяет большое количество ключевых слов, которые нельзя использовать в качестве иментаблиц, индексов, столбцов, баз данных, пользовательских функций, параметров сортировки, модулей виртуальных таблиц или любого другого именованного объекта.

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