我现在使用Django cursor.execuremany一段时间了,我想做一些清理工作。
在这个Stackoverflow页面上,我读到使用字符串格式化操作符并使用问号是一个坏主意。 https://jsfiddle.net/co8pxq2f/1/
然而,当我在我的程序中使用它时,我收到一个错误:
TypeError: not all arguments converted during string formatting
这是我写的代码:
from django.db import connection
values = ((1, "john"), (2, "robert"), (3, "angela"))
cursor = connection.cursor()
query = "REPLACE INTO names (id, name) VALUES (?, ?)"
cursor.executemany(query, values)
当我仅将?
替换为%s
时,它会按预期工作。
另一件事(让我开始搜索)是PyCharm在使用%s
时给我一个错误。
<expression> expedted, got %
这不是主要问题,但我不确定这是否会产生影响。
我在使用什么
答案 0 :(得分:2)
当我只更换?使用%s,它按预期工作。
?
占位符仅用于SQLite:
将
?
作为占位符放在任何想要使用值的位置,然后提供一个值元组作为游标execute()
方法的第二个参数。 (其他数据库模块可能使用不同的占位符,例如%s
或:1
。)
MySQL驱动程序希望将%s
视为查询参数占位符:
query = "REPLACE INTO names (id, name) VALUES (%s, %s)"
cursor.executemany(query, values)
另一件事(让我开始搜索)是PyCharm在使用%s时给我一个错误。
PyCharm不会在我的结尾发出任何警告。你可能做了不同的事情: