我有一个小问题。而且我认为我在做一些愚蠢的事情,但无法弄清楚
首先:我想从 python 的 mysql 上触发一个动态构造的 sql。它的简单插入语句,但值可以包含双引号和其他特殊字符。所以,我不知道该怎么做。然后我遇到了这个线程 - Stackoverflow
据此,我尝试了以下代码
def fire_statement(stmt, value_tuple=None):
try:
if value_tuple == None:
cur.execute(stmt)
return True
else:
v = tuple(value_tuple)
cur.execute(stmt % v)
return True
except Exception, ex:
print ex
print "Query: '"+stmt+"'"
return False
我必须在这个函数中传递动态创建的 stmt 和 value_tuple 我没有其他方法,因为列名和值都将取决于外部条件。q还有一条信息是传递的value_tuple原来是一个列表。
这段代码中出现了两种情况,可惜这些方法都不起作用
条件 1:当 value_tuple = ('269', '1', '69', '1096', '1', '3070801', 'BE', '1963', '6') 且 stmt = INSERT INTO XXX ( NCLASS
, CRECEIVE
, SUBCAT
, GDATE
, ASSCODE
, PATENT
, COUNTRY
, GYEAR
, CAT
) 值 (?, ?, ?, ?, ?, ?, ?, ?, ?) 我收到此错误 - 并非所有参数都在字符串格式化期间转换
(显然,对于这种情况,行 - cur.execute(stmt % v) 更改为 cur.execute(stmt , v))。
条件 2:当 value_tuple = ('269', '1', '69', '1096', '1', '3070801', 'BE', '1963', '6') 并且 stmt = INSERT INTO XXX ( NCLASS
, CRECEIVE
, SUBCAT
, GDATE
, ASSCODE
, PATENT
, COUNTRY
, GYEAR
, CAT
) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s) 它抛出这个错误 - (1054, "Unknown '字段列表'中的列 'BE'") 查询:'INSERT INTO XXX ( NCLASS
, CRECEIVE
, SUBCAT
, GDATE
, ASSCODE
, PATENT
, COUNTRY
, GYEAR
, CAT
) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)'
似乎它根本没有取代。但是如果我在 cur.execute 之前进行打印 (stmt % v),则结果显示为 - INSERT INTO XXX ( NCLASS
, CRECEIVE
, SUBCAT
, GDATE
, ASSCODE
, PATENT
, COUNTRY
, GYEAR
, CAT
) VALUES (269, 1, 69, 1096, 1, 3070801, BE, 1963, 6)
这显然是不正确的,因为它没有将字符串值括在引号内。我相信这可能会导致错误。为此,我在开发周期中严重停止了几个小时。请帮忙
提前致谢