pandas实现to_sql将DataFrame保存到数据库中

  • Post category:Python

当我们使用pandas工具对数据进行处理后,如果需要将处理后的数据存储到数据库中,可以使用pandas提供的to_sql方法。to_sql方法可以将DataFrame对象中存储的数据保存到数据库中的表中。下面详细讲解如何使用pandas实现to_sql将DataFrame保存到数据库中。

注意:本教程假设你已经具备了基本的Python、pandas和SQL语言知识。

准备工作

在使用to_sql方法将DataFrame保存到数据库之前,需要先准备好以下工作:

  1. 安装数据库的Python驱动程序。比如如果你使用的是MySQL数据库,可以使用Python的pymysql模块。如果你使用的是PostgreSQL数据库,可以使用psycopg2模块。
  2. 创建一个数据库并在其中创建一张表。

这里以MySQL为例,假设你已经安装了pymysql模块,并且创建一个名为test的数据库,并在其中创建一张名为data的表。表中包含三个字段:id、name和age。

下面的Python代码就是创建test数据库并在其中创建data表的代码:

import pymysql

# 创建数据库连接
conn = pymysql.connect(
    host='localhost',
    port=3306,
    user='root',
    password='root',
    charset='utf8mb4'
)

# 创建数据库
cursor = conn.cursor()
cursor.execute('CREATE DATABASE IF NOT EXISTS test')
conn.select_db('test')

# 创建数据表
cursor.execute('''
    CREATE TABLE IF NOT EXISTS `data` (
      `id` bigint(20) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
      `age` int(11) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
''')

将DataFrame保存到数据库中

当准备工作完成后,可以使用to_sql方法将DataFrame保存到数据库中的data表中。to_sql方法接受几个必要的参数,包括DataFrame对象、数据库的表名、数据库连接对象、写入模式等。下面先看一下示例代码:

import pandas as pd
import pymysql

# 创建DataFrame对象
data = pd.DataFrame({'name': ['Tom', 'Jerry'], 'age': [25, 26]})

# 创建数据库连接
conn = pymysql.connect(
    host='localhost',
    port=3306,
    user='root',
    password='root',
    db='test',
    charset='utf8mb4'
)

# 将DataFrame储存为MySQL中的数据表,不储存index列
data.to_sql('data', conn, if_exists='append', index=False)

代码中首先创建了一个DataFrame对象,然后创建了一个Pymysql的数据库连接对象,最后使用data.to_sql方法将数据保存到数据库的data表中。

to_sql方法的参数解释:

  • 第一个参数是DataFrame对象,表示要保存到数据库中的数据。
  • 第二个参数是字符串类型,表示要保存到的数据库表名。
  • 第三个参数是Pymysql的数据库连接对象,表示连接到的数据库。
  • if_exists参数表示数据表已经存在时的处理方式,可选值为‘fail’(什么都不做)、‘replace’(即覆盖原表)、‘append’(在原表底部追加),默认为‘fail’。
  • index参数表示是否将在DataFrame中的索引列也保存到数据表中。默认为True。

下面给出一个更加完整的示例代码,该代码演示了如何将从CSV文件中读取的数据保存到MySQL数据库中的data表中。

import pandas as pd
import pymysql

# 从CSV文件中读取数据
df = pd.read_csv('data.csv')

# 创建MySQL连接
conn = pymysql.connect(
    host='localhost',
    port=3306,
    user='root',
    password='root',
    db='test',
    charset='utf8mb4'
)

# 将数据保存到MySQL数据库中的data表中,不保存索引列
df.to_sql(name='data', con=conn, if_exists='append', index=False)

上面的代码中将数据保存方式改为了’append’(在原表底部追加),并且通过‘read_csv’方法读取了CSV文件中的数据。通过这个示例可以看出,to_sql方法不仅适用于DataFrame对象,还适用于从其他数据源读取的数据。