python-3.x - 如何使用 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))
解决方案
好吧,由于您没有使用绑定变量,而是简单地格式化字符串查询(顺便说一句,这是一个坏主意,因为它很容易允许 SQL 注入攻击),您的第一步可能应该是找出这些变量中的实际内容三变量。
一个简单的:
print("SELECT id FROM wordnet_entry WHERE pos = '{}' AND sense = '{}' AND literal = '{}' LIMIT 1".format(pos, sense, literal))
在运行查询之前,应该希望能告诉您有关查询的所有信息,包括它是否格式错误。
推荐阅读
- html - 将样式更改为整个 html 后,焦点可见在某些链接中不起作用
- flutter - 颤动删除特定页面的标签栏
- socat - 是否可以使用 socat 打开现有的 tun 设备而不是创建新设备?
- mysql - 如何在groupby mysql之后获得最大值
- javascript - 在 Bootstrap 中单击时将卡片变灰
- javascript - 奇怪的行为: if( 取布尔值 false
- javascript - 与 node-gyp 相关的电子生成器错误
- vb.net-2010 - 在 Source Bitmap 和 BitmapData 中声明 Format32BppArgb 时,Lockbits 返回一个意外的(对我而言)Stride 值
- .net - .net Framework 3.5 版本中的 PropertyGrid 绘制异常
- android - DRM/KMS 禁用连接器和 crtc