不管是做数据分析还是风控建模,都避免不了从数据库中取数,和把数据写入数据库。本文整理连接数据库的不同方法,以及单条写入数据和批量写入数据。所有代码都实测可用,并实际应用于生产,分享给更多在这方面遇到困难的朋友。取数后的分析结果若想定时发送给相关人员,可参考【干货】用Python每天定时发送监控邮件。
文章目录
- 一、连接数据库方法一(pymysql)
- 二、连接数据库方法二(create_engine)
- 三、把数据导入到数据库
- 四、一行一行追加写入少量数据
- 五、批量追加写入数据
一、连接数据库方法一(pymysql)
首先介绍连接数据库的方法一,具体代码如下:
import pymysql
import numpy as np
import pandas as pd
#36数据库
conn = pymysql.connect(host='ip', user='用户名', passwd='密码', db='数据库名')
#建立连接,host中填mysql服务器所在的主机的ip,user中填为用户名,passwd中填密码,db中填数据库名
sql = ''' select * from credit_approve_result limit 3'''
date = pd.read_sql_query(sql, conn)
主要思路是先导入库,再填入ip、用户名、密码、数据库名等信息建立连接。然后定义sql查询语句,进行数据查询。如果对pymysql函数有疑问,可以到”阿黎逸阳的代码“公众号中参考历史文章:实现Python连接数据库取数需求。
二、连接数据库方法二(create_engine)
接着介绍连接数据库的方法二,具体代码如下:
import pandas as pd
from sqlalchemy import create_engine
conn = create_engine('mysql+pymysql://user:passwd@ip:3306/db',encoding='utf8')
#建立连接,user替换为用户名,passwd替换为密码,ip替换为mysql服务器所在的主机的ip,db中填数据库名
sql = ''' select * from credit_approve_result limit 3'''
date = pd.read_sql_query(sql, conn)
主要思路是先导入库,再填入用户名、密码、数据库名等信息建立连接,其中3306是默认端口。然后定义sql查询语句,进行数据查询。可以发现这两种连接方式很像,只是用到的库不一样,填信息的形式不一样,大体步骤是一样的。
三、把数据导入到数据库
刚刚我们已经从数据库中读取数据了,我们试下把sql取数的结果导入到新表中。具体代码如下:
conn = create_engine('mysql+pymysql://user:passwd@ip:3306/test',encoding='utf8')
#建立连接,user替换为用户名,passwd替换为密码,ip替换为mysql服务器所在的主机的ip
date.to_sql("jlkj_cs", conn, if_exists='replace', index=False)
以上代码是把date数据导入到test库的jlkj_cs表中,如果之前存在这张表,用date的数据替换这张表。
四、一行一行追加写入少量数据
为了让大家更清晰地看到取数,写入数据,追加写入数据的逻辑。这一节把前面几小节的内容进行了汇总,并增加了一行一行追加写入少量数据的代码。具体如下:
import pandas as pd
import pymysql.cursors
from sqlalchemy import create_engine
#读取数据
conn = create_engine('mysql+pymysql://user:passwd@ip:3306/temp_data_2',encoding='utf8')
jxb_sx_head3 = pd.read_sql('''select session_id, customerName from xb_policy_sxall limit 3''',conn)
#写入数据
conn = create_engine('mysql+pymysql://user:passwd@ip:3306/test',encoding='utf8')
jxb_sx_head3.to_sql("jlkj_cs", conn, if_exists='replace', index=False)
#单条插入数据
conn = pymysql.connect(host='ip',user = "用户名", passwd = "密码", db = "test")
cursor = conn.cursor()
cursor.executemany(
"insert into jlkj_cs values(%s, %s)",
[
('OT111', '张一'),
('OT112', '张二')
]
)
conn.commit()
#检查是否插入成功
conn = pymysql.connect(host='ip',user = "用户名", passwd = "密码", db = "test")
cs_add_date = pd.read_sql('''select * from jlkj_cs''',conn)
cs_add_date
得到结果:
五、批量追加写入数据
在第四小节中已经介绍了一条一条写入数据的方法,本小节介绍把数据框直接追加写入到数据库表中的方法。具体代码如下:
conn = create_engine('mysql+pymysql://user:passwd@ip:3306/test',encoding='utf8')
date_pl.to_sql(name='jlkj_cs', con=conn, if_exists='append', index=False, index_label=False)
cs_add_date2 = pd.read_sql('''select * from jlkj_cs''',conn)
cs_add_date2
得到结果:
其中date_pl中的数据需要和写入表的数据一致。至此,Python连接数据库取数与写入数据已讲解完毕,需要的朋友可以自己跟着代码尝试一遍图片。
【限时免费进群】群内提供学习Python、玩转Python、风控建模、人工智能、数据分析相关招聘内推信息、优秀文章、学习视频,也可交流学习工作中遇到的相关问题。需要的朋友添加微信号19967879837,加时备注想进的群,比如风控建模。
你可能感兴趣:
用Python绘制皮卡丘
用Python绘制词云图
Python人脸识别—我的眼里只有你
Python画好看的星空图(唯美的背景)
用Python中的py2neo库操作neo4j,搭建关联图谱
Python浪漫表白源码合集(爱心、玫瑰花、照片墙、星空下的告白)