Python pymysql是否能执行在一个字符串里面的多句SQL

Posted 但老师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python pymysql是否能执行在一个字符串里面的多句SQL相关的知识,希望对你有一定的参考价值。

我们都知道pymysql是可以执行SQL的,但是把多句SQL写在一个字符串里,pymysql能否执行呢?
假设变量如下

sql = "select '1';select '2'"

我们看看能否正常执行


测试

按照常规流程开始测试

import pymysql 
db = pymysql.connect(
	host = '10.250.90.117',
	port = 3306,
	user = 'danzhao',
	passwd = 'danzhao',
	db = 'danzhao'
)
cs = db.cursor()

sql = "select '1';select '2'"
cs.execute(sql)	# 执行SQL
data = cs.fetchall()

结果却是…
报错了
报错信息如下

ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'select '2'' at line 1")

这个提示是syntax,也就是语法错误的意思


结论

pymysql不能执行一个字符串里的多句SQL,会报错


处理方案

如果可能出现一个字符串里多句SQL,建议方案如下

  1. 如果可以操作字符串,则改写成可循环元素形式然后循环
    例如上面的sql变量改成
sqlList = [
	"select '1'",
	"select '2'"
]
data = []
for sql in sqlList:
	cs.execute(sql)
	data.append(cs.fetchall())
  1. 如果不太方便操作字符串,建议加split以转换成列表然后循环
sqlList = sql.split(';')
data = []
for sql in sqlList:
	cs.execute(sql)
	data.append(cs.fetchall())

以上是关于Python pymysql是否能执行在一个字符串里面的多句SQL的主要内容,如果未能解决你的问题,请参考以下文章

python执行SQL语句中有格式化时是否需要加引号

python pymysql和orm

第三篇 Python关于mysql的API--pymysql模块

Python中pymysql基本使用

mysql客户端pymysql在python下性能比较

Python使用pandas & pymysql读取MySQL数据到csv文件中