Как исправить синтаксическую ошибку «OperationalError: near 'n': syntax error» в sqlite3 с использованием python 3.5 - PullRequest
0 голосов
/ 10 февраля 2019

Я получаю операционную ошибку в self.cur.execute(...), указанном в заголовке при вызове функции:

    def get_synset(self, pos, sense, literal):

        with self.conn:
            self.cur.execute("SELECT id FROM wordnet_entry WHERE pos = '{}' AND sense = '{}' AND literal = '{}' LIMIT 1".format(pos, sense, literal))
            synset_id = self.cur.fetchone()[0]

            return Synset(self, synset_id)

Я использую ноутбук Jupyter.Сама функция находится в file.py.Доступ к нему осуществляется через импорт

from dir import file.py

Код ошибки:

    OperationalError   Traceback (most recent call last)
     47         with self.conn:
---> 48             self.cur.execute("SELECT id FROM wordnet_entry WHERE pos = '{}' AND sense = '{}' AND literal = '{}' LIMIT 1".format(pos, sense, literal))*
     49             synset_id = self.cur.fetchone()[0]
     50 

OperationalError: near "n": syntax error

Сообщение об ошибке мне кажется неоднозначным.

* РЕДАКТИРОВАТЬ

Я опубликовалнеправильное сообщение об ошибке.Имеется одно дополнительное условие AND:

 ---> 48  self.cur.execute("SELECT id FROM wordnet_entry WHERE pos = '{}' AND sense = '{}' AND literal = '{}' LIMIT 1".format(pos, sense, literal))

1 Ответ

0 голосов
/ 10 февраля 2019

Что ж, поскольку вы не используете связанные переменные и вместо этого просто форматируете строковый запрос (кстати, это плохая идея, поскольку он может легко разрешить атаки с использованием SQL-инъекций), ваш первый шаг, вероятно, должен состоять в том, чтобы выяснить, чтона самом деле в этих трех переменных.

Простое:

print("SELECT id FROM wordnet_entry WHERE pos = '{}' AND sense = '{}' AND literal = '{}' LIMIT 1".format(pos, sense, literal))

перед выполнением запроса, мы надеемся, расскажет вам все, что вам нужно знать о запросе, в том числе о том,искажен или нет.

...