python示例--下载mysql数据库中数据--excel表格,合并表格

用到的知识点

1.mysql连接

2.pandas的concat数据合并

3.路径等


import threading
import requests
import json
import pymysql
from openpyxl import load_workbook
import openpyxl
import os
from configparser import ConfigParser
import time
import sys
import pandas as pd


# __file__  #表示文件的名字
# os.path.abspath(__file__)  #绝对路径
#软件运行的所在文件夹目录--根目录
BASEDIR=os.path.dirname(os.path.abspath(__file__))
pathfile=os.path.join(BASEDIR,'config','config.ini')
# print(pathfile)

def inputdata():


    # stringss=input("请输入数据格式:'pvm ip:行政区划代码,189.1.1.1:610403,...':").strip()
    stringss=input("请输入数据格式:'ipaddress:行政区划代码,...':").strip()
    items=stringss.split(',')
    # print(items,type(items))
    pcaddress=['161.20.12.156','161.20.12.112','181.172.11.119','181.172.11.11']
    for cityitem in items:
        ip,citycode=cityitem.split(":")
        #排除一些ip地址
        # if ip=='161.20.12.156'' or ip=='161.20.12.15'' or ip=='181.172.11.11':
        if ip in pcaddress:
            print("IP地址输入问题")
            sys.exit()

        
        if not citycode.startswith('112504'):
            print("行政区划范围输入问题")
            sys.exit()

        #启用多线程进行数据下载工作
        th=threading.Thread(target=calldownloadcity,args=(ip,citycode))
        th.start()
        # print(ip,citycode)
        # calldownloadcity(ip,citycode)


def calldownloadcity(ip,citycodearg):
    citycode = citycodearg
    cityaddress = ip

    try:
        db = pymysql.connect(host=cityaddress, user="root", passwd="123456", db="dbss")
    except:
        print(cityaddress,"连接平台失败,请检查网络!")
        time.sleep(2)
        return


    downloadCity(citycode,db)

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

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

    wb = openpyxl.Workbook()
    wbsheet = wb.create_sheet("结果")
    print(citycode,"数据写入文件中,请稍等....")
    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(xlsxname,"数据写入完成,请到软件目录下获取excel文件")


def fludb():
    pass

#合并所有excel表格



#合并表格数据是以 191开头 以xlsx结尾的excel表格信息
def concatex():
    # print(pathfile)

    filesnames=os.listdir(os.getcwd())   #获取当前目录下所有文件
    writername=pd.ExcelWriter(r'ALL合成信息表.xlsx')   #最终保存文件的名称--最终合成的xlsx文件
    excel_files=[]   #接入符合要求的excel表格名称
    for filename in filesnames:
        if os.path.splitext(filename)[1]=='.xlsx' and filename.startswith('191'):    #后缀以'.xlsx'结尾,同时与‘191’开头的文件放入列表
            excel_files.append(filename)
    print("合并表格正在进行中,请稍后....:")
    print(excel_files)

    mergedflists=[]    #存放读取的表格的内容,临时缓冲区作用

    for excelname in excel_files:
        excel_content=pd.read_excel(excelname,sheet_name='结果',header=None)   #读取每个表格的sheet表为‘结果’的表格信息到列表中
        mergedflists.append(excel_content)


    ####数据保存=#############
    pd.concat(mergedflists).to_excel(writername,sheet_name='All合成表信息',index=False)
    writername.save()   #保存信息




def tuichu():
    sys.exit()


func_dic = {
    '1' :inputdata,
    '2' :concatex,
    '3' :tuichu,


}

if __name__ == '__main__':


    while True:
        print('''
          
            ===========功能列表===========
            1.下载图像资料信息
            2.合并当前目录下191**开头的所有excel表格-->'ALL合成信息表.xlsx'
            3.退出

           
             ''')
        choice = input('请输入功能编号:').strip()
        if choice not in func_dic:
            print("输入正确的编号:")
            continue

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





你可能感兴趣的:(python个人使用代码,python,mysql,数据库)