Django cursor.executemany参数

时间:2016-05-03 17:54:10

标签: python mysql django

我现在使用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 %

这不是主要问题,但我不确定这是否会产生影响。

我在使用什么

  • Python 2.7
  • Django 1.4
  • MySQL的

1 个答案:

答案 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不会在我的结尾发出任何警告。你可能做了不同的事情:

enter image description here