python实现用户数据库信息查询

目的:
利用python构造一个小程序,可以连接数据库,实现通过电话查看其订单情况、批量显示某时间段内各分校名单量、转化率、报名金额等信息功能。

步骤
1,在mysql构造相关数据库,将订单、市场活动等数据导入
2,利用python编写程序
3,使用pyinstall将py文件打包成exe文件

具体代码

import xlrd
import pymysql
import matplotlib.pyplot as plt
import matplotlib
import numpy as np
import pandas as pd
from pandas.plotting import register_matplotlib_converters
#打开文件,暂时无用,为后续利用文件内容进行数据提取做准备
def open_excel():
    try:
        book = xlrd.open_workbook("ceshi.xlsx")  # 文件名,把文件与py文件放在同一目录下
    except:
        print("open excel file failed!")
    try:
        sheet = book.sheet_by_name("Sheet1")  # execl里面的worksheet1
        return sheet
    except:
        print("locate worksheet in excel failed!")
        
  #命令1 连接数据库 根据电话号码获取其订单信息,并绘制缴费变化图     
def query_data(num,plot1=0):
    db = pymysql.connect(host='192.168.121.17',
            port=3306,
            user='user',
            passwd='151140124',
            db='mysq',
            charset='utf8')
    cursor = db.cursor()
    query = "select * from dingdan_message where 电话=%d"%int(num)  # 获取订单表中记录数

    cursor.execute(query)  # 执行sql语句
    data = cursor.fetchall()
    columnDes = cursor.description  # 获取连接对象的描述信息
    cursor.close()


    columnNames = [columnDes[i][0] for i in range(len(columnDes))]
    df = pd.DataFrame([list(i) for i in data], columns=columnNames)
    #绘图
    if plot1==1:
        matplotlib.rcParams['font.family'] = 'SimHei'
        register_matplotlib_converters()
        plt.plot(df['缴费日期'], df['实收金额'])
        register_matplotlib_converters()
        for i in range(len(df['产品'])):
            plt.annotate(df['产品'][i]+df['班型'][i],xy=(df['缴费日期'][i],df['实收金额'][i]),xytext=(df['缴费日期'][i],df['实收金额'][i]+4000)
                     ,arrowprops=dict(arrowstyle='->'))#facecolor='red', shrink=0.01
        plt.xlabel("缴费日期(s)")
        plt.ylabel("实收金额(m)")
        plt.title("产品变化图")
        plt.gcf().autofmt_xdate()
        plt.show()
        plt.close()
    #print(df['缴费日期'], df['应收金额'])
    print(df.shape[0])
    #if df
    return(df.shape[0])

#命令2 获取电话的tq通话记录信息
def query_data2(num):
    db = pymysql.connect(host='192.168.121.17',
            port=3306,
            user='user',
            passwd='151140124',
            db='mysq',
            charset='utf8')
    cursor2 = db.cursor()
    query2 = "select * from new_telephone_messages where 访客电话=%d" % num  # 获取订单表中记录数

    cursor2.execute(query2)  # 执行sql语句
    data2 = cursor2.fetchall()
    columnDes2 = cursor2.description  # 获取连接对象的描述信息
    cursor2.close()
    columnNames2 = [columnDes2[i][0] for i in range(len(columnDes2))]
    df2 = pd.DataFrame([list(i) for i in data2], columns=columnNames2)
    print(df2['访客电话'])

#查询3获取时间段内各个订单的的具体回访情况
def mingdan_chaxun(starttime,endtime):
    db = pymysql.connect(host='192.168.121.17',
            port=3306,
            user='user',
            passwd='151140124',
            db='mysq',
            charset='utf8')
    cursor3 = db.cursor()
    query3 = "select * from customer where 新建日期>%s and 新建日期< %s"%(starttime,endtime)  # 获取订单表中记录数

    query4 = 'SELECT a.电话号码1,a.客户姓名,b.* FROM (SELECT * FROM customer WHERE 新建日期>%s AND 新建日期< %s) a ' \
             'LEFT JOIN (SELECT 电话,COUNT(电话)  AS `缴费次数`,SUM(实收金额),省 FROM dingdan_message GROUP BY 电话) b ' \
             'on a.电话号码1=b.电话' \
             % (starttime, endtime)#查询转化情况
    query5 = 'SELECT a.电话号码1,a.所属部门,a.客户姓名,b.*,c.* FROM (SELECT * FROM customer WHERE 新建日期>%s AND 新建日期< %s) a ' \
             'LEFT JOIN (SELECT 电话,COUNT(电话)  AS `缴费次数`,SUM(实收金额) as 实收金额总,省 FROM dingdan_message GROUP BY 电话) b ' \
             'on a.电话号码1=b.电话' \
             ' left join (select 访客电话,COUNT(访客电话) 通话次数,SUM(IF(`是否接通`="已接通",1,0)) 接通次数,SUM(HOUR(通话时长))*60+SUM(MINUTE(通话时长)) 通话时长 from new_telephone_messages group by 访客电话)c ' \
             'on a.电话号码1=c.访客电话' \
             % (starttime, endtime)#查询转化及回访情况
    print(query5)
    cursor3.execute(query5)  # 执行sql语句
    data4 = cursor3.fetchall()
    columnDes4 = cursor3.description  # 获取连接对象的描述信息
    columnNames4 = [columnDes4[i][0] for i in range(len(columnDes4))]
    df4 = pd.DataFrame([list(i) for i in data4], columns=columnNames4)
    xinzengdianhuashu=df4.shape[0]
    df_zhuanhuadingdan=df4['实收金额总'].dropna(axis=0).shape[0]#这里存在缴费金额即视为转化,后续可设置限值如300
    tonghuashu=df4['通话次数'].dropna(axis=0).sum()
    tonghuashu_avg=tonghuashu/xinzengdianhuashu
    jietongshu = df4['接通次数'].dropna(axis=0).sum()
    jietongshu_avg=jietongshu/xinzengdianhuashu
    tonghuashichang=df4['通话时长'].dropna(axis=0).sum()
    huifangshichang_avg=tonghuashichang/xinzengdianhuashu
    print('这段时间内新增电话 %d 个,转化 %d 个,转化率%f。通话次数%d个,平均每个电话通话%f次。接通次数%d,平均每个电话接通次数%f,回访时间%f分钟'
          %(xinzengdianhuashu,df_zhuanhuadingdan,df_zhuanhuadingdan/xinzengdianhuashu,tonghuashu,tonghuashu_avg,jietongshu,jietongshu_avg,huifangshichang_avg))
    print("jieshu")
    cursor3.close()
    return(df4)



def save(data,dir='shuju.xlsx'):
    dir_root='D:\\python\\我的py\\python学习\\中公工作\\'
    dir=dir_root+dir
    data.to_excel(dir)

def main():
    #1导入到mysql,最好采用sqllog
    #2启动连接

    #2查询 通过电话查询其报名情况

    num1=int(13001178588)#15222252191
    #message=query_data2(num1)#查询电话记录
    chaxunleixing=int(input("请输入查询数字(1-电话查询;2-名单查询;3-订单查询;4-电话记录查询):"))
    if chaxunleixing == 1:
        n = 0
        while n < 1:
            num = input("请输入电话号码:")
            if len(num) != 11:
                print("输入错误")
                continue
            print("输入成功")
            a=input("是否绘图(是输入1,否输入0):")
            message = query_data(int(num), int(a))
            break
    elif chaxunleixing == 2:
        while 1 > 0:
            starttime = input("请输入开始时间(格式为'yyyy-mm-dd'):")
            if len(starttime) != 10:
                print("起始时间输入错误,请重新输入")
                continue
            endtime = input("请输入结束时间(格式为'yyyy-mm-dd'):")
            if len(endtime) != 10:
                print("结束时间输入错误,请重新输入")
                continue
            starttime = "'" + starttime + "'"
            endtime = "'" + endtime + "'"
            mingdan_message = mingdan_chaxun(starttime, endtime)
            save(mingdan_message, 'shuju')
            break
    elif chaxunleixing == 3:
        while 1 > 0:
            starttime = input("请输入开始时间(格式为'yyyy-mm-dd'):")
            if len(starttime) != 10:
                print("起始时间输入错误,请重新输入")
                continue
            endtime = input("请输入结束时间(格式为'yyyy-mm-dd'):")
            if len(endtime) != 10:
                print("结束时间输入错误,请重新输入")
                continue
            starttime = "'" + starttime + "'"
            endtime = "'" + endtime + "'"
            dingdan_message = dingdan_chaxun(starttime, endtime)
            save(dingdan_message, 'shuju')
            break

    else:
        print("代号输入错误,请重新运行程序。")



    #mingdan_message = mingdan_chaxun(starttime,endtime)


    #message = query_data1(num)#获取其名单回访数据
    #3可视化 做表,绘图
    #plot  绘制产品变化图
    #plot2 绘制意向变化图
    #plot3展示该学员的整体情况表 包含通话次数,平均通话时间等
    #4条件筛选
    #通过条件设置找出符合条件电话,并汇总表示
    #5保存
if __name__=='__main__':
    main()

运行后,会出现选择界面,通过输入不同数字进行后续查询。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200112212703430.png
然后便是利用pyinstall将该py文件打包,具体方式见
https://editor.csdn.net/md/?articleId=93140409

发布了23 篇原创文章 · 获赞 6 · 访问量 4672

猜你喜欢

转载自blog.csdn.net/qq_34211618/article/details/103949754