如何使用python 3.5修复sqlite3中的“ OperationalError:'n'附近:语法错误”语法错误

时间:2019-02-10 06:19:05

标签: python-3.x sqlite 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))

1 个答案:

答案 0 :(得分:0)

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

简单:

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

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