Pandas操作mysql数据库!
theme: smartblue
公众号:尤而小屋
作者:Peter
编辑:Peter
大家好,我是Peter~
本文介绍的是如何使用Pandas来操作MySQL数据库
。主要是包含查询MySQL中的数据,以及往数据库中写入数据。
先安装两个库:
- pymysql
- sqlalchemy
python
pip install pymysql
pip install sqlalchemy
本地数据库
查看一个本地数据库中某个表的数据。这份数据是《MySQL经典50题》的一个表之一:
部分习题答案:
```sql mysql -u root -p -- 安装mysql,进入数据库输入暗文密码
show databases; -- 显示全部数据库 use test; -- 使用某个数据库 show tables; -- 查看数据库下的全部表 select * from Student; -- 查看某个表的全部内容 ```
操作MySQL
连接MySQL
以pymysql模块为例,讲解如何连接数据库。
In [1]:
``` import pandas as pd
import pymysql from sqlalchemy import create_engine ```
In [2]:
```python connection = pymysql.connect( host='127.0.0.1', # 本机ip地址 port=3306, # mysql默认端口号 user="root", # 用户名 password="password", # 密码 charset="utf8", # 字符集 db="test" # 数据库 )
cur = connection.cursor() # 建立游标 cur ```
Out[2]:
<pymysql.cursors.Cursor at 0x11ddc1190>
connect()方法常用的参数:
| connect() 常用参数 | 说明 | | ------------------ | ------ | | host | 主机ip | | user | 用户名 | | password | 密码 | | database | 数据库 | | port | 端口号 | | charset | 字符集 |
调用 cursor() 方法即可返回一个新的游标对象,在连接没有关闭之前,游标对象可以反复使用
执行sql查询语句
In [3]:
```python sql=""" # 待执行的sql语句 select * from Student; """
执行sql语句
cur.execute(sql)
```
Out[3]:
8
In [4]:
cur
结果表明是个游标对象:
Out[4]:
<pymysql.cursors.Cursor at 0x11ddc1190>
In [5]:
cur.description
主要返回游标的属性信息,官网的描述为:
Out[5]:
(('s_id', 253, None, 20, 20, 0, False),
('s_name', 253, None, 20, 20, 0, True),
('s_birth', 253, None, 20, 20, 0, True),
('s_sex', 253, None, 20, 20, 0, True))
In [6]:
```python
列名
columns = [col[0] for col in cur.description] columns ```
Out[6]:
['s_id', 's_name', 's_birth', 's_sex']
游标使用
下图显示的是如何取出一条或者多条数据(按照顺序查询)
通过游标获取全部的数据:
fetch相关的函数都是获取结果集中剩下的数据,多次调用的时候只会从剩余数据中查询:
当第二次调用的时候结果就是空集。
通过游标获取查询的结果集的特点:
- 可以获取1条、多条和全部数据
- 在获取数据的时候是按照顺序读取的
- fetchall函数返回剩下的所有行
- 如果是末尾,则返回空元组;
- 否则返回一个元组,其元素是每一行的记录封装的一个元组
转成DataFrame
```python
列名
columns = [col[0] for col in cur.description]
数据集合
data = [] for i in cur.fetchall(): data.append(i)
df = pd.DataFrame(data,columns=columns) ```
保存成CSV数据
SQL插入数据
往MySQL数据库中插入数据:
```python import pandas as pd
import pymysql from sqlalchemy import create_engine
connection = pymysql.connect( host='127.0.0.1', # 本机ip地址 port=3306, # mysql默认端口号 user="root", # 用户名 password="11112222", # 密码 charset="utf8", # 字符集 db="test" # 数据库 )
cur = connection.cursor() # 建立游标
待执行SQL语句
sql="""
insert into test.Student(s_id, s_name, s_birth, s_sex) values("09","吴越","1998-08-08","男")
"""
执行sql语句
cur.execute(sql)
```
很关键一步,要记得提交,这样最终才会写入数据库:
python
connection.commit()
执行SQL删除语句
使用完之后记得关闭连接:
python
connection.close()
使用sqlalchemy
第二种常用的方法是通过sqlalchemy来连接数据库:
连接数据库
```python import pandas as pd from sqlalchemy import create_engine
依次填写MySQL的用户名、密码、IP地址、端口、数据库名
create_engine("数据库类型+数据库驱动://数据库用户名:数据库密码@IP地址:端口/数据库",其他参数)
engine = create_engine("mysql+pymysql://root:[email protected]:3306/test") ```
查询语句1
查询语句2
写入数据
将Pandas
中的DataFrame
写入新的表testdf
中:
python
show tables;
使用read_sql读取
使用Pandas自带的read_sql函数能够自行读取数据,读取上面创建的数据.
官网:http://pandas.pydata.org/docs/reference/api/pandas.read_sql.html
```python import pandas as pd from sqlalchemy import create_engine
依次填写MySQL的用户名、密码、IP地址、端口、数据库名
engine = create_engine("mysql+pymysql://root:[email protected]:3306/test")
sql语句
sql4 = "select * from testdf;" df4 = pd.read_sql(sql4, engine) ```
- 基于机器学习分类算法的钢材缺陷检测分类
- JSON数据,Python搞定!
- 逻辑回归:信贷违规预测!
- kaggle实战-肿瘤数据统计分析
- Pandas操作mysql数据库!
- 数学公式编辑神器-Mathpix Snipping Tool
- 精选20个Pandas统计函数
- 露一手,利用Python分析房价
- 德国信贷数据建模baseline!
- Python函数传参机制详解
- Python爬虫周游全国-兰州站
- 一道Pandas题:3种解法
- 机器学习实战:基于3大分类模型的中风病人预测
- 利用seaborn绘制柱状图
- 机器学习实战:基于MNIST数据集的二分类问题
- 基于深度学习Keras的深圳租房建模
- 机器学习高频使用代码片段
- Python入门:Python变量和赋值
- 深度学习框架Keras入门保姆教程
- kaggle实战:极度不均衡的信用卡数据分析