通过 Python 通过命令运行 SQL
Posted
技术标签:
【中文标题】通过 Python 通过命令运行 SQL【英文标题】:Run SQL via command via Python 【发布时间】:2017-09-08 23:58:52 【问题描述】:我正在努力将此 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()
【问题讨论】:
【参考方案1】:查询应该用引号引起来,参数化你的 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+'%'))
参考:http://mysql-python.sourceforge.net/MySQLdb.html
【讨论】:
我在这方面做得更进一步,但它并不完全奏效。你能解释一下这部分吗?:LIKE '%%%s%%'""" 它给出了这个错误,表明 % 不太正确: SQL 语法中的语法错误;在第 1 行的 'this_string'%'' 附近" 是的,上面的评论似乎显示了错误:'this_string'% 是通过顶部列出的 %%%s%% 插入到查询中的内容。但它需要插入的是:'%this_string%' ...。我试图修改 %s 的东西,但我得到了错误。 好的,你的编辑解决了这个问题。但我仍然收到一个语法错误:第 1 行 '%this_string%''' 附近的 SQL 语法中的语法错误。知道如何让 Python 打印出带有变量和所有变量的 SQL 语句的样子吗?跨度> @user7433145 我修复了查询以删除搜索字符串周围的不正确刻度。我会查看这个答案以查看最后一次查询运行(即使查询运行有异常) - link【参考方案2】:您遇到的错误是什么?如果是语法错误,那是因为您没有将 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 命令,但它仍然是一个字符串。
【讨论】:
以上是关于通过 Python 通过命令运行 SQL的主要内容,如果未能解决你的问题,请参考以下文章