大众号:尤而小屋
作者:Peter
修改:Peter

大家好,我是Peter~

本文介绍的是如何运用Pandas来操作MySQL数据库。主要是包含查询MySQL中的数据,以及往数据库中写入数据。

Pandas操作mysql数据库!

先装置两个库:

  • pymysql
  • sqlalchemy
pip install pymysql
pip install sqlalchemy

本地数据库

检查一个本地数据库中某个表的数据。这份数据是《MySQL经典50题》的一个表之一:

Pandas操作mysql数据库!

部分习题答案:

Pandas操作mysql数据库!

Pandas操作mysql数据库!

mysql -u root -p   -- 装置mysql,进入数据库输入暗文暗码
show databases;  -- 显现悉数数据库
use test;  -- 运用某个数据库
show tables;  -- 检查数据库下的悉数表
select * from Student;  -- 检查某个表的悉数内容

Pandas操作mysql数据库!

操作MySQL

衔接MySQL

以pymysql模块为例,解说如何衔接数据库。

In [1]:

import pandas as pd
import pymysql
from sqlalchemy import create_engine

In [2]:

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]:

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

主要回来游标的特色信息,官网的描述为:

Pandas操作mysql数据库!

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]:

# 列名
columns = [col[0] for col in  cur.description]
columns

Out[6]:

['s_id', 's_name', 's_birth', 's_sex']

游标运用

下图显现的是如何取出一条或许多条数据(依照次序查询)

Pandas操作mysql数据库!

经过游标获取悉数的数据:

Pandas操作mysql数据库!

fetch相关的函数都是获取成果集中剩余的数据,屡次调用的时分只会从剩余数据中查询:

Pandas操作mysql数据库!

当第2次调用的时分成果就是空集。

经过游标获取查询的成果集的特色:

  1. 能够获取1条、多条和悉数数据
  2. 在获取数据的时分是依照次序读取的
  3. fetchall函数回来剩余的所有行
    • 如果是结尾,则回来空元组;
    • 不然回来一个元组,其元素是每一行的记录封装的一个元组

转成DataFrame

Pandas操作mysql数据库!

Pandas操作mysql数据库!

# 列名
columns = [col[0] for col in  cur.description]
# 数据集合
data = []
for i in cur.fetchall():
    data.append(i)
df = pd.DataFrame(data,columns=columns)

保存成CSV数据

Pandas操作mysql数据库!

SQL刺进数据

往MySQL数据库中刺进数据:

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)  

很要害一步,要记住提交,这样终究才会写入数据库:

connection.commit()

Pandas操作mysql数据库!

履行SQL删除句子

Pandas操作mysql数据库!

Pandas操作mysql数据库!

运用完之后记住封闭衔接:

connection.close()

运用sqlalchemy

第二种常用的办法是经过sqlalchemy来衔接数据库:

衔接数据库

import pandas as pd
from sqlalchemy import create_engine
# 顺次填写MySQL的用户名、暗码、IP地址、端口、数据库名
# create_engine("数据库类型+数据库驱动://数据库用户名:数据库暗码@IP地址:端口/数据库",其他参数)
engine = create_engine("mysql+pymysql://root:password@localhost:3306/test")

查询句子1

Pandas操作mysql数据库!

查询句子2

Pandas操作mysql数据库!

写入数据

Pandas中的DataFrame写入新的表testdf中:

Pandas操作mysql数据库!

show tables;

Pandas操作mysql数据库!

运用read_sql读取

运用Pandas自带的read_sql函数能够自行读取数据,读取上面创建的数据.

官网:pandas.pydata.org/docs/refere…

import pandas as pd
from sqlalchemy import create_engine
# 顺次填写MySQL的用户名、暗码、IP地址、端口、数据库名
engine = create_engine("mysql+pymysql://root:password@localhost:3306/test")
# sql句子
sql4 = "select * from testdf;"
df4 = pd.read_sql(sql4, engine)

Pandas操作mysql数据库!