Python之运用Pandas库完成MySQL数据库的读写
作者头像
  • 品评科技网
  • 2019-11-08 16:23:46 3

本次分享将介绍如何在Python中利用Pandas库实现MySQL数据库的读写操作。首先我们需要了解一些关于ORM(对象关系映射)的基础知识。

ORM技术

对象关系映射(ORM)是一种编程技术,它将关系型数据库中的表结构映射到应用程序中的对象上。通过使用描述对象和数据库之间映射关系的元数据,ORM能够自动地将程序中的对象持久化到关系型数据库中。

在Python中,最知名的ORM框架是SQLAlchemy。而在Java中,常见的ORM中间件包括Hibernate、iBatis和Speedframework。

SQLAlchemy

SQLAlchemy是一个开源的Python库,提供SQL工具包和ORM工具,并采用MIT许可证发布。它包含一个create_engine()函数,用于初始化数据库连接。该函数需要一个字符串参数来表示数据库连接信息,格式如下:

'数据库类型+数据库驱动名称://用户名:密码@主机地址:端口号/数据库名'

Pandas读写MySQL数据库

为了实现Pandas对MySQL数据库的读写功能,我们需要以下三个库:pandas、sqlalchemy和pymysql。

  • pandas模块提供了read_sql_query()函数,用于执行数据库查询;to_sql()函数则用于向数据库中写入数据。
  • sqlalchemy模块实现了与多种数据库的连接。
  • pymysql模块允许Python程序操作MySQL数据库。

我们将使用名为mydb的MySQL数据库中的employee表,具体内容如下:

注意以下几点: 1. 根据库的文档,to_sql函数支持两种MySQL引擎:SQLAlchemy和SQLite3。在写入数据库时,pymysql不可用。 2. 另外,mysqldb也无效,只能使用SQLAlchemy或SQLite3。鉴于SQLite3已经很久没有更新,推荐使用SQLAlchemy。

to_sql函数实际上位于pandas.io.sql模块中,不是直接在pandas模块内。因此,最佳使用方式如下:

python pd.io.sql.to_sql(df1, 'table_name', con=conn, if_exists='replace')

接下来,我们将通过一个简单的例子展示如何在Pandas中完成对MySQL数据库的读写操作:

```python import pandas as pd from sqlalchemy import create_engine

初始化数据库连接,使用pymysql模块

MySQL用户:root,密码:123456,端口:3306,数据库:test

engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test')

查询语句,选择employee表中的所有数据

sql = 'SELECT * FROM employee;'

使用readsqlquery()函数执行查询

df = pd.readsqlquery(sql, engine)

输出employee表的查询结果

print(df)

创建一个新的pandas DataFrame,只有'id'和'name'两列

df = pd.DataFrame({'id': [1, 2, 3, 4], 'name': ['zhangsan', 'lisi', 'wangwu', 'zhuliu']})

将新创建的DataFrame存储到MySQL数据库中的表,存储索引列

df.to_sql('mydf', engine, index=True) print('成功从和写入MySQL表!') ```

运行结果如下:

plaintext id name 0 1 zhangsan 1 2 lisi 2 3 wangwu 3 4 zhuliu

这表明我们成功地将Pandas中新建的DataFrame写入了MySQL数据库。

将CSV文件写入到MySQL数据库

除了上述示例外,我们还将介绍如何将CSV文件写入到MySQL数据库中。示例中的CSV文件如下所示:

示例Python代码如下:

```python

导入必要的模块

import pandas as pd from sqlalchemy import create_engine

初始化数据库连接,使用pymysql模块

dbinfo = { 'user': 'root', 'password': '123456', 'host': 'localhost', 'port': 3306, 'database': 'test' } engine = createengine('mysql+pymysql://%(user)s:%(password)s@%(host)s:%(port)d/%(database)s?charset=utf8' % db_info, encoding='utf-8')

直接使用另一种方式也可以

engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test')

读取本地CSV文件

df = pd.read_csv("C:/Users/fuqia/Desktop/example.csv", sep=',')

print(df)

将新建的DataFrame存储到MySQL数据库中的表,不存储索引列

如果表存在,根据if_exists参数的不同,可以选择不同的行为

1. fail: 如果表存在,不做任何操作

2. replace: 如果表存在,先删除表,再新建一个表并将数据插入

3. append: 如果表存在,将数据插入,如果表不存在,则创建新表

df.tosql('example', con=engine, index=False, ifexists='replace')

print("成功写入MySQL数据库!") ```

在MySQL中查看example表的内容:

总结

本文主要介绍了ORM技术和SQLAlchemy模块,并展示了两个Python程序的实例,演示了如何使用Pandas库实现MySQL数据库的读写操作。

这些程序本身并不复杂,关键在于多加练习。希望这些示例对你有所帮助。

    本文来源:图灵汇
责任编辑: : 品评科技网
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
读写运用完成数据库PythonPandasMySQL
    下一篇