我有个小问题。我想我是在做一些愚蠢的事情,但却搞不懂
第一个: 我想在mysql上从python启动一个动态构建的sql。它是一个简单的insert语句,但是值中可以有双引号和其他特殊字符。所以,我不知道该怎么做。 然后我偶然发现了这个线索-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元组,因为列名和值都取决于外部条件,所以我没有其他方法。还有一条信息是传递的值元组原来是一个列表。在
这段代码中出现了两种情况,可惜这些方法都不起作用
条件1:当值元组=(“269”,“1”,“69”,“1096”,“1”,“307801”,“BE”,“1963”,“6”)时
并且stmt=插入到XXX(NCLASS
,CRECEIVE
,SUBCAT
,GDATE
,ASSCODE
,PATENT
,COUNTRY
,GYEAR
,CAT
)值(?, ?, ?, ?, ?, ?, ?, ?, ?)
我得到了这个错误-不是所有的参数在字符串格式转换
(很明显这句台词-当前执行(报表%v)更改为当前执行(stmt,v))对于这种情况。在
条件2:当value tuple=('269','1','69','1096','1','307081','BE','1963','6')并且stmt=插入到XXX(NCLASS
,CRECEIVE
,SUBCAT
,GDATE
,ASSCODE
,PATENT
,COUNTRY
,GYEAR
,CAT
)值(%s,%s,%s,%s,%s,%s,%s)
它正在引发此错误-(1054,“字段列表”中的“BE”列未知)
Query:'插入到XXX(NCLASS
,CRECEIVE
,SUBCAT
,GDATE
,ASSCODE
,PATENT
,COUNTRY
,GYEAR
,^{{
看来它根本就没有替代品。但是如果我在当前执行结果显示为-INSERT到XXX(NCLASS
,CRECEIVE
,SUBCAT
,GDATE
,ASSCODE
,PATENT
,COUNTRY
,GYEAR
,CAT
)值(269,1,69,1096,1,307801,BE,1963,6)
这显然是不对的,因为它没有将字符串值括在引号中。我相信这可能是导致错误的原因。为此,我在开发周期中严重停顿了几个小时。请帮忙
提前谢谢
你想用
而不是
^{pr2}$如果你有
使用
%
传递两个字符串('val1', 'val2')
,它将变成:它被解释为列名,显然不存在。在
如果你这么做的话
正确解释为
你也可以使用
以查看可以在数据库中执行的格式正确的查询。在
相关问题 更多 >
编程相关推荐