客户需求
通过EXCEL中的电话号码查询到电话号码在销售系统中所对应的 (电话号码,住址,客户等级,成单时间)
实现步骤
1.读取EXCEL文件中的电话号码,并将其转化为字符串(同数据库中的存储格式一致),之后将其用‘,’号 拼接(为sql语句查询做准备)。
2.使用sshtunnel、pymysql包,连接数据库。
3.使用pd.read_sql获取在数据库中的查询内容。
注意事项
1.sql语句缩进
2.执行完毕,要将数据库连接终止,不要占用端口。(终端程序的运行)
EXCEL中客户电话存储形式如图
import pymysql
import pandas as pd
from sshtunnel import SSHTunnelForwarder
# 连接数据库
def connect_eas():
server = SSHTunnelForwarder(
('xxx.xxx.xxx.xx', 22),# 跳板机的地址和端口
ssh_password='xxxx',# 跳板机登录密码
ssh_username='xxxx',# 跳板机登录用户
remote_bind_address=('xxx.xxx.x.xxx', 3306)# 远程的mysql服务器
)
server.start()
# 调用pymysql包,取得数据连接
con = pymysql.connect(
host='127.0.0.1',
port=server.local_bind_port,
user='xxxxx',
passwd='xxxxx',
db='xxxxx'
)
return server, con
# 读取excel中的客户电话号码,并将号码拼接成字符串
def read_excel():
data_phone= pd.read_excel('customer_phone.xlsx')
phone=data_phone['客户电话'].astype('str')
add_chars = ','
phone_chars = add_chars.join(phone)
return phone_chars
# *****补充内容 查询字符串 *********
# 获取需要查询的名字
def get_name():
dfdata=pd.read_excel("name.xlsx")
dfname=dfdata['姓名']
str_name = dfname.astype('str')
add_chars = ','
name = add_chars.join(list(map(lambda x: "'%s'" % x, str_name)))
return name
# 进行中数据库查询,并将查询结果作为excel输出
def get_mysql_result(phone_chars,con):
# sql查询语句 (注:sql语句一定要缩进,否则出错)
my_sql ="select \
a.phone as '电话',\
a.source as '地址',\
a.rating as '客户等级',\
a.time as '成单时间',\
from guke as a\
where a.phone in ({})\
ORDER BY a.time DESC".format(phone_chars)
# 读取执行后的sql查询语句
result = pd.read_sql(my_sql,con)
return result
if __name__ == '__main__':
# 读取excel数据
data_phone = read_excel()
# 获取数据库连接
server,con = connect_eas()
# 执行sql查询语句
result_data=get_mysql_result(data_phone,con)
# 将查询结果用xlsx格式输出
result_data.to_excel("提取结果.xlsx")
# 关闭和数据库的连接
con.close()
# 关闭服务器
server.close()
print("执行完毕")