前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【最全】Python连接数据库取数与写入数据

【最全】Python连接数据库取数与写入数据

作者头像
阿黎逸阳
发布2023-08-21 19:55:27
9620
发布2023-08-21 19:55:27
举报
文章被收录于专栏:阿黎逸阳的代码

不管是做数据分析还是风控建模,都避免不了从数据库中取数,和把数据写入数据库。

本文整理连接数据库的不同方法,以及单条写入数据和批量写入数据。

所有代码都实测可用,并实际应用于生产,分享给更多在这方面遇到困难的朋友。

取数后的分析结果若想定时发送给相关人员,可参考【干货】用Python每天定时发送监控邮件

一、连接数据库方法一(pymysql)

首先介绍连接数据库的方法一,具体代码如下:

代码语言:javascript
复制
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)

接着介绍连接数据库的方法二,具体代码如下:

代码语言:javascript
复制

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取数的结果导入到新表中。 具体代码如下:

代码语言:javascript
复制
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的数据替换这张表。 四、一行一行追加写入少量数据 为了让大家更清晰地看到取数,写入数据,追加写入数据的逻辑。 这一节把前面几小节的内容进行了汇总,并增加了一行一行追加写入少量数据的代码。 具体如下:

代码语言:javascript
复制
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

得到结果:

五、批量追加写入数据 在第四小节中已经介绍了一条一条写入数据的方法,本小节介绍把数据框直接追加写入到数据库表中的方法。 具体代码如下:

代码语言:javascript
复制
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连接数据库取数与写入数据已讲解完毕,需要的朋友可以自己跟着代码尝试一遍。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 阿黎逸阳的代码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档