使用 python sqlite3 模块,如何处理包含双引号的字段?

Posted

技术标签:

【中文标题】使用 python sqlite3 模块,如何处理包含双引号的字段?【英文标题】:With python sqlite3 module, how to deal with fields that contain double-quotes? 【发布时间】:2011-10-10 14:33:16 【问题描述】:

我试图访问一个数据库,该数据库的数据包含“”,例如:

汤姆“是”一只猫。

当我使用这段代码时:

我的数据 = 100; myKey = '汤姆“是”一只猫。'

myCursor.execute('UPDATE MyTable SET MyField = %d WHERE MyTable.Key == "%s"' % (myData, myKey))

我收到了这个错误

sqlite3.OperationalError: "is" 附近: 语法错误

请注意,我的 %s 已用“”括起来。 我也尝试在它周围使用单引号或添加 \,但都没有奏效。 知道如何解决这个问题吗?

【问题讨论】:

不,不,不!永远不要使用 % 运算符将变量放入 SQL 语句中!使用参数替换,就像在 mouad 的回答中一样。您不会使用% 正确转义——如果您愿意,它比使用逗号需要更多的工作。严重地。不要将% 用于 SQL。 【参考方案1】:

使用 DB-API parameter substitution 并将格式留给 sqlite3 库:

myCursor.execute('UPDATE MyTable SET MyField = ? WHERE MyTable.Key == ?', (myData, myKey))

【讨论】:

【参考方案2】:

你不应该在sql语句中使用双引号来包围字符串,因此你应该在语句中使用单引号:

myData = 100 
myKey = 'Tom "is" a cat.'
myCursor.execute('''UPDATE MyTable SET MyField = %d WHERE MyTable.Key ='%s' ''' % (myData, myKey))

三单引号允许您像在文本编辑器中一样使用单引号。

【讨论】:

-1。您应该对 SQL 语句使用参数替换,而不是字符串插值。 嗯,它也可以这样工作;这是一种替代方法。 这是一种very dangerous 的做法,您应该教初学者。 您是绝对正确的,但使用单引号作为 SQL 语法的基础之一的字符串。我认为初学者首先应该想到这一点。 这不是基础学习顺序的问题。将数据字符串直接放在 SQL 中是非常糟糕。这是网络上排名第一的安全问题。这也是很容易避免的,如果人们因为这样做而被大喊大叫并被教导如何正确地做。我不能否决建议的答案。

以上是关于使用 python sqlite3 模块,如何处理包含双引号的字段?的主要内容,如果未能解决你的问题,请参考以下文章

处理包/模块中的错误时如何处理Python异常

关于python如果没有numpy模块如何处理

Python反射机制中参数问题如何处理?

出现“python import路径”问题,该如何处理?

Pyspark:如何处理 python 用户定义函数中的空值

[IT学习]Python如何处理异常特殊字符