Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将python脚本从sqlite3更改为mysql的语法_Python_Mysql Python - Fatal编程技术网

将python脚本从sqlite3更改为mysql的语法

将python脚本从sqlite3更改为mysql的语法,python,mysql-python,Python,Mysql Python,我有一个工作的python脚本,它从SQLite3DB检索数据。但我需要将其转换为与mysql db对话,这是让我感到悲伤的第一行: PRODUCT_CODE_ID = "SELECT id FROM localsite_productcode WHERE localsite_productcode.product_code=?" cur.execute(PRODUCT_CODE_ID,(product_code,)) 当我尝试使用mysql时,会出现以下错误: Traceback (most

我有一个工作的python脚本,它从SQLite3DB检索数据。但我需要将其转换为与mysql db对话,这是让我感到悲伤的第一行:

PRODUCT_CODE_ID = "SELECT id FROM localsite_productcode WHERE localsite_productcode.product_code=?"
cur.execute(PRODUCT_CODE_ID,(product_code,))
当我尝试使用mysql时,会出现以下错误:

Traceback (most recent call last):
  File "gen-csv.py", line 85, in <module>
    cur.execute(PRODUCT_CODE_ID,(product_code,))
  File "/usr/lib/pymodules/python2.6/MySQLdb/cursors.py", line 151, in execute
    query = query % db.literal(args)
TypeError: not all arguments converted during string formatting
回溯(最近一次呼叫最后一次):
文件“gen csv.py”,第85行,在
当前执行(产品代码ID,(产品代码)
文件“/usr/lib/pymodules/python2.6/MySQLdb/cursors.py”,执行中的第151行
query=查询%db.literal(args)
TypeError:在字符串格式化过程中并非所有参数都已转换

我在这里做错了什么?

我不认为MySQL的DB API支持作为占位符的
只要试一下
%s

我不认为MySQL的DB API支持作为占位符的
只要试一下
%s

另请参阅解释。谢谢使用%s工作,但是,如果不使用sql,如何防止sql注入呢?方法?@user1294974是相同的-占位符通常是
:0
%s
-它们都做相同的事情-记住
%s
不是用于字符串插值,而不是用于查询参数替换。简而言之,只要使用它,您就不必担心它了。您在异常输出中看到的
db.literal
函数基本上会遍历所有参数,并确保正确插入它们。这也是文档中“转换为SQL文本值”的含义。另请参阅以获取解释。谢谢-使用%s是可行的,但是如何防止在不使用%s的情况下进行SQL注入呢?方法?@user1294974是相同的-占位符通常是
:0
%s
-它们都做相同的事情-记住
%s
不是用于字符串插值,而不是用于查询参数替换。简而言之,只要使用它,您就不必担心它了。您在异常输出中看到的
db.literal
函数基本上会遍历所有参数,并确保正确插入它们。这也是文档中“转换为SQL文本值”的意思。