python -mysql-excel数据导出-如何把python的list列表中的数据放入sql语句的in后的语句中的办法

2023年1月9日08:56:27

1.重要内容分析:

如何把python的list列表中的数据放入sql语句的in后的语句中的办法:

idlists=dics["data"]["cameraIdList"]   #返回一个列表【“id1”,“id2”,。。。】
# print(idlists)
ids=tuple(idlists)
idstrs=str(ids)   #变成sql中的字符查询


#这里是关键信息,重点查询数据信息,把python中的列表转换成字符,然后在sql中查询

#1. sqlselect = "select * from device WHERE id in {}".format(idstrs)
sqlselect = "select * from device WHERE id in {}".format(ids)
cursor = db.cursor()
import requests
import json
import pymysql
from openpyxl import load_workbook
import openpyxl


# 下载内容的组织结构:
# json
# 	code
# 	data
# 		message
# 		cameraIdList
# 			j7bP32dsdssdsdsdsdqw
# 			j7bwewerwewewerwewee

# //1.下载文件

#0.连接mysql数据库



"""
程序解决问题:
1.下载ppvm中指定用户下的包含哪些点位信息,例如,张三 这个用户下的有哪些点位信息
2.导出张三 账户下的点位信息到excel表格中。

难点:把这个列表‘idlists=dics["data"]["cameraIdList"] ’===>先转换为元组格式,然后通过format放入sql语句中
放入sql语句的

sqlselect = "select * from evice WHERE id in {}".format(idstrs) 中,
此处使用了拼接字符串的方式解决,
"""
db = pymysql.connect(host='127.0.0.1', user='root',passwd= 'a123456', db='stryvmdb')

# 下载json文件信息
def calldoloadfile():
    ip=input("请输入ppvm的地址:").strip()
    id=input("请输入np_pvmdb数据库中对应的用户的id名称:").strip()
    doloadfile(ip, id)

def doloadfile(ip,id):
    url61 = "http://{}:31121/npconfig/api/v1/{}/camera/idList".format(ip,id)

    res=requests.get(url61)


    savefilename="{}.json".format(ip)
    with open(savefilename,"wb") as f:   #这里关注wb写入的是二进制文件
        f.write(res.content)

#2.读取需要的文件---》一个列表

def callreadfile():
    jsonname=input("请输入要读取的json文件名称:")
    # 判断下 如果没有写*。json后缀,自动加上后缀
    if not jsonname.endswith(".json"):
        jsonname="{}.json".format(jsonname)

    xlsxname="{}.xlsx".format(jsonname)   #保存的excel文件名,跟输入的json文件同名

    readfile(jsonname,xlsxname)


def readfile(jsonname,xlsxname):
    # with open("61json.json","r") as fr:
    with open(jsonname,"r") as fr:
        dics=json.load(fr)

        # print(dics)
        # return dics
        idlists=dics["data"]["cameraIdList"]   #返回一个列表【“id1”,“id2”,。。。】
        # print(idlists)
        ids=tuple(idlists)
        idstrs=str(ids)   #变成sql中的字符查询


        #这里是关键信息,重点查询数据信息,把python中的列表转换成字符,然后在sql中查询

        # sqlselect = "select * from device WHERE id in {}".format(idstrs)
        sqlselect = "select * from device WHERE id in {}".format(ids)
        cursor = db.cursor()
        cursor.execute(sqlselect)

        wb = openpyxl.Workbook()
        wbsheet = wb.create_sheet("结果")
        print("数据写入文件中,请稍等....")
        result=cursor.fetchall()
        # print(result)
        for rowdata in result:
            wbsheet.append(rowdata)  #写入excel表格
            # print(rowdata)

        wb.save(xlsxname)  #保存的excel表格

        cursor.close()  #关闭游标
        db.close()   #关闭数据库
        print("完成数据写入,请到软件目录下获取excel文件")


def calldownloadcity():
    citycode = input("请输入你要下载的城市代码code:")

    downloadCity(citycode)

# 下载每个地市的文件,采用sql语句+excel表格的方式
def downloadCity(citycode):

    #这里字符串的解决一定要注意的
    # sqlcity = "select * from deviceWHERE gb_id like %s%%"%(citycode)
    sqlcity = "select * from deviceWHERE gb_id like '{}%%'".format(citycode)
    print(sqlcity)
    cursor = db.cursor()
    cursor.execute(sqlcity)

    wb = openpyxl.Workbook()
    wbsheet = wb.create_sheet("结果")
    print("数据写入文件中,请稍等....")
    result = cursor.fetchall()
    # print(result)
    for rowdata in result:
        wbsheet.append(rowdata)  # 写入excel表格
        # print(rowdata)
    xlsxname="{}.xlsx".format(citycode)
    wb.save(xlsxname)  # 保存的excel表格

    cursor.close()  # 关闭游标
    db.close()  # 关闭数据库
    print("完成数据写入,请到软件目录下获取excel文件")


def fludb():
    pass





func_dic = {
    '1':calldoloadfile,
    '2':callreadfile,
    '3':calldownloadcity,

}

if __name__ == '__main__':

    while True:
        print('''
            
            ===========功能列表===========
            1.下载pvm导出的用户权限的json文件
            2.读取数据并且生成excel表格
            3.下载cc数据
    
            ==================
             ''')
        choice = input('请输入功能编号:').strip()
        if choice not in func_dic:
            print("输入正确的编号:")
            continue

        func_dic.get(choice)()
        # print("本次录入数据条目是{}:条".format(jc))





  • 作者:雨师@
  • 原文链接:https://blog.csdn.net/wtt234/article/details/124712133
    更新时间:2023年1月9日08:56:27 ,共 3146 字。