1

我试图访问具有包含“”的数据的数据库,例如:

汤姆“是”一只猫。

当我使用此代码时:

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

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

我收到了这个错误

sqlite3.OperationalError:靠近“is”:语法错误

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

4

2 回答 2

4

使用DB-API 参数替换并将格式留给 sqlite3 库:

myCursor.execute('UPDATE MyTable SET MyField = ? WHERE MyTable.Key == ?', (myData, myKey))
于 2011-10-10T14:37:54.180 回答
-2

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

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

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

于 2011-10-10T14:39:09.730 回答