Python pymysql 连接mysql数据库及sql执行_sql

单条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)