通过Python通过命令运行SQL

通过Python通过命令运行SQL,python,mysql,Python,Mysql,我正在努力将这个SQL查询写入Python脚本 所有变量都存储在Python中。我需要SQL语句来传递python变量,然后执行查询 SQL语句应该在DB中查询col1、col2、col3中的“this_string”,然后用string1、string2和string3更新field1、field2和field3 但是我想不出来 mystring = 'this_string' string1 = 'test1' string2 = 'test2' string3 = 'test3' UPD

我正在努力将这个SQL查询写入Python脚本

所有变量都存储在Python中。我需要SQL语句来传递python变量,然后执行查询

SQL语句应该在DB中查询col1、col2、col3中的“this_string”,然后用string1、string2和string3更新field1、field2和field3

但是我想不出来

mystring = 'this_string'
string1 = 'test1'
string2 = 'test2'
string3 = 'test3'

UPDATE databaseb.name SET field1 = string1, field2 = string2, field3 = string3 WHERE CONCAT_WS('', column1,column2,column3) LIKE '%this_string%'
我试过这个

conn = MySQLdb.connect(host= "1.2.3.4",
user="me",
passwd="passwd",
db="dbname",
use_unicode=True,
charset="utf8")
x = conn.cursor()
x.execute(UPDATE databaseb.name SET field1 = string1, field2 = string2, field3 = string3 WHERE CONCAT_WS('', column1,column2,column3) LIKE '%this_string%'
)
conn.commit()
conn.close()

您得到的错误是什么?如果是语法错误,那是因为您没有将UPDATE命令括在引号中(

我的意思是:

x.execute("UPDATE databaseb.name SET field1 = string1, field2 = string2, field3 = string3 WHERE CONCAT_WS('', column1,column2,column3) LIKE '%this_string%'")

请记住,
x.execure
是一个接收字符串对象作为输入的函数。该字符串应该指定要执行的SQL命令,但它仍然是一个字符串。

查询应该用引号括起来,并且最好将SQL参数化。它可能看起来像这样:

x.execute("""UPDATE databaseb.name SET field1 = %s, field2 = %s, field3 = %s WHERE CONCAT_WS('', column1,column2,column3) LIKE %s""",(string1, string2, string3, '%'+this_string+'%'))

参考资料:

我对此有了进一步的了解,但它不太管用。请您进一步解释一下这一部分好吗?:如“%%s%%”,它给出了此错误,表明%不太正确:SQL语法中的语法错误;在第1行的“this_string”%”附近“是的,上面的注释似乎显示了错误:'此字符串''%1!''是通过顶部列出的%%s%%插入到查询中的内容。但它需要插入的是:'%this_string%'。。。。我试图修补%s,但出现了错误。好的,您的编辑修复了这个问题。但我仍然得到一个语法错误:在第1行的“%this_string%”附近的SQL语法中出现语法错误。知道如何让Python打印出SQL语句的变量和所有内容吗?@user7433145我修复了查询,删除了搜索字符串周围不正确的记号。我将检查此答案以查看上次运行的查询(即使查询运行时有异常)-