首页 > 解决方案 > 如何使用 python 3.5 修复 sqlite3 中的“OperationalError: near 'n': syntax error”语法错误

问题描述

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))

标签: python-3.xsqlitesyntax-error

解决方案


好吧,由于您没有使用绑定变量,而是简单地格式化字符串查询(顺便说一句,这是一个坏主意,因为它很容易允许 SQL 注入攻击),您的第一步可能应该是找出这些变量的实际内容三变量。

一个简单的:

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

在运行查询之前,应该希望能告诉您有关查询的所有信息,包括它是否格式错误。


推荐阅读