将python脚本从sqlite3更改为mysql的语法
我有一个工作的python脚本,它从SQLite3DB检索数据。但我需要将其转换为与mysql db对话,这是让我感到悲伤的第一行:将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
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文本值”的意思。