前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Pandas操作MySQL数据库

Pandas操作MySQL数据库

作者头像
皮大大
发布2023-08-25 11:16:34
3860
发布2023-08-25 11:16:34
举报

Pandas操作MySQL数据库

本文介绍的是如何使用Pandas来操作MySQL数据库。

  • pymysql
  • sqlalchemy

先安装两个库:

代码语言:javascript
复制
pip install pymysql
pip install sqlalchemy

本地数据库

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

代码语言:javascript
复制
mysql -u root -p   -- 安装mysql,进入数据库输入暗文密码

show databases;  -- 显示全部数据库
use test;  -- 使用某个数据库
show tables;  -- 查看数据库下的全部表
select * from Student;  -- 查看某个表的全部内容

操作MySQL

连接MySQL

以pymysql模块为例,讲解如何连接数据库。

In [1]:

代码语言:javascript
复制
import pandas as pd

import pymysql
from sqlalchemy import create_engine

In [2]:

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

代码语言:javascript
复制
<pymysql.cursors.Cursor at 0x11ddc1190>

connect()方法常用的参数:

connect() 常用参数

说明

host

主机ip

user

用户名

password

密码

database

数据库

port

端口号

charset

字符集

调用 cursor() 方法即可返回一个新的游标对象,在连接没有关闭之前,游标对象可以反复使用

执行sql查询语句

In [3]:

代码语言:javascript
复制
sql="""  # 待执行的sql语句
select * from Student;
"""

# 执行sql语句
cur.execute(sql)

Out[3]:

代码语言:javascript
复制
8

In [4]:

代码语言:javascript
复制
cur

结果表明是个游标对象:

Out[4]:

代码语言:javascript
复制
<pymysql.cursors.Cursor at 0x11ddc1190>

In [5]:

代码语言:javascript
复制
cur.description

主要返回游标的属性信息,官网的描述为:

Out[5]:

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

代码语言:javascript
复制
# 列名
columns = [col[0] for col in  cur.description]
columns

Out[6]:

代码语言:javascript
复制
['s_id', 's_name', 's_birth', 's_sex']

游标使用

下图显示的是如何取出一条或者多条数据(按照顺序查询)

通过游标获取全部的数据:

fetch相关的函数都是获取结果集中剩下的数据,多次调用的时候只会从剩余数据中查询:

当第二次调用的时候结果就是空集。

通过游标获取查询的结果集的特点:

  1. 可以获取1条、多条和全部数据
  2. 在获取数据的时候是按照顺序读取的
  3. fetchall函数返回剩下的所有行
    • 如果是末尾,则返回空元组;
    • 否则返回一个元组,其元素是每一行的记录封装的一个元组

转成DataFrame

代码语言:javascript
复制
# 列名
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数据库中插入数据:

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

很关键一步,要记得提交,这样最终才会写入数据库:

代码语言:javascript
复制
connection.commit()

执行SQL删除语句

使用完之后记得关闭连接:

代码语言:javascript
复制
connection.close()

使用sqlalchemy

第二种常用的方法是通过sqlalchemy来连接数据库:

连接数据库

代码语言:javascript
复制
import pandas as pd
from sqlalchemy import create_engine

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

写入数据

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

代码语言:javascript
复制
show tables;

使用read_sql读取

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

代码语言:javascript
复制
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)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-8-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Pandas操作MySQL数据库
  • 本地数据库
  • 操作MySQL
    • 连接MySQL
      • 执行sql查询语句
        • 游标使用
          • 转成DataFrame
            • 保存成CSV数据
              • SQL插入数据
                • 执行SQL删除语句
                • 使用sqlalchemy
                  • 连接数据库
                    • 写入数据
                    • 使用read_sql读取
                    相关产品与服务
                    云数据库 MySQL
                    腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档