单条sql执行函数封装
execute
execute
方法用于执行单个SQL语句。当你只需要执行一个SQL查询或命令时,你应该使用这个方法。
cursor.execute("SELECT * FROM table_name WHERE id = %s", (some_id,))
results = cursor.fetchall()
这里将数据库连接信息写死在sql执行函数中,若需要动态改变数据库连接参数,可改为变量传递到函数。
def singleSqlExec(sqlstr):
conn = connect(host="192.168.1.1",
port=3306,
database="dbname",
user="root",
password="xxxxx",
charset="utf8")
cursor = conn.cursor()
# data = json.loads(request.data)
# print(data)
execsql = sqlstr
cursor.execute(execsql)
res = cursor.fetchall()
conn.commit()
cursor.close()
conn.close()
return res
批量执行的sql执行函数封装
executemany
executemany
方法用于执行多个SQL语句,其中每个语句都使用一组不同的参数。这在批量插入或更新数据时特别有用。
#传递两种类型数据
#1.元祖 ((),(),())
#2.元祖列表 [(),(),()]
data = [
(1, 'John'),
(2, 'Jane'),
(3, 'Doe')
]
cursor.executemany("INSERT INTO table_name (id, name) VALUES (%s, %s)", data)
批量执行sql函数实现
def multiSqlExecMany(sqlstr,results):
conn = connect(host="192.168.1.1",
port=3306,
database="dbname",
user="root",
password="xxxxx",
charset="utf8")
cursor = conn.cursor()
execsql = sqlstr
cursor.executemany(execsql,results)
res = cursor.fetchall()
conn.commit()
cursor.close()
conn.close()
return res
批量执行sql的sql内容拼接
将某次查询所有结果插入到一个新的table中
querystr = 'select * from '+data['type']
queryResult = singleSqlExec(querystr)
# print(queryResult[0],type(queryResult))
querylist = list(queryResult) #转为元祖列表做数据插入前处理
if data['type'] == 'cwys':
#将每一项数据处理成要插入的数据格式,包括格式转换和元祖拼接
for index in range(0,len(queryResult)):
querylist[index] = querylist[index][:-2] + (querylist[index][-2].strftime("%Y-%m-%d %H:%M:%S"),) + (querylist[index][-1],year,month)
# print(querylist[index])
# break
emptysql = 'delete FROM test_data where year = '+ year +' and month=' + month
res = await singleSqlExec(emptysql)
sqlInsert = 'insert into test_data (id,client_type,client_name,income_taxin,income_comp,income_taxex,incom_type,income_period,\
ctcmp_name,ct_org,file_gen_time,file_recv_m,year,month) values (%s, %s, %s, %s, %s,%s, %s, %s, %s, %s,%s, %s, %s, %s)'
insertres = tuple(querylist)
await multiSqlExecMany(sqlInsert,insertres)