中的字符串替换问题mysqldb.exeu

2024-05-19 10:24:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有个小问题。我想我是在做一些愚蠢的事情,但却搞不懂

第一个: 我想在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(NCLASSCRECEIVESUBCATGDATEASSCODEPATENTCOUNTRYGYEARCAT)值(?, ?, ?, ?, ?, ?, ?, ?, ?) 我得到了这个错误-不是所有的参数在字符串格式转换

(很明显这句台词-当前执行(报表%v)更改为当前执行(stmt,v))对于这种情况。在

条件2:当value tuple=('269','1','69','1096','1','307081','BE','1963','6')并且stmt=插入到XXX(NCLASSCRECEIVESUBCATGDATEASSCODEPATENTCOUNTRYGYEARCAT)值(%s,%s,%s,%s,%s,%s,%s) 它正在引发此错误-(1054,“字段列表”中的“BE”列未知) Query:'插入到XXX(NCLASSCRECEIVESUBCATGDATEASSCODEPATENTCOUNTRYGYEAR,^{{})值(%s,%s,%s,%s,%s,%s,%s,%s)'

看来它根本就没有替代品。但是如果我在当前执行结果显示为-INSERT到XXX(NCLASSCRECEIVESUBCATGDATEASSCODEPATENTCOUNTRYGYEARCAT)值(269,1,69,1096,1,307801,BE,1963,6)

这显然是不对的,因为它没有将字符串值括在引号中。我相信这可能是导致错误的原因。为此,我在开发周期中严重停顿了几个小时。请帮忙

提前谢谢


Tags: returnvaluebecountryxxx元组stmttuple
1条回答
网友
1楼 · 发布于 2024-05-19 10:24:21

你想用

cur.execute(stmt, v)

而不是

^{pr2}$

如果你有

"INSERT INTO tab (col1, col2) VALUES (%s, %s)"

使用%传递两个字符串('val1', 'val2'),它将变成:

"INSERT INTO tab (col1, col2) VALUES (val1, val2)"

它被解释为列名,显然不存在。在

如果你这么做的话

cur.execute(stmt, v)

正确解释为

"INSERT INTO tab (col1, col2) VALUES ('val1', 'val2')"

你也可以使用

print cur.mogrify(stmt, v)

以查看可以在数据库中执行的格式正确的查询。在

相关问题 更多 >

    热门问题