Python Pandas pandas.read_sql函数实例用法

1. pandas.read_sql()概述

在Python Pandas中,pandas.read_sql()函数可以用来读取SQL数据库当中的数据,并将其转换成Pandas中的DataFrame格式。这个函数包含了许多参数,可以帮助你实现各种不同的读取数据的需求。下面将通过一个实例来介绍它的用法。

2. 实例介绍

为了演示pandas.read_sql()的用法,我们需要先准备好一个SQL数据库。在这个例子中,我们使用了一个开源的电影数据集,其中包含了电影的基本信息以及评分数据。这个数据集可以从以下链接中下载到:

https://grouplens.org/datasets/movielens/

下载完成之后,我们先将数据集导入到一个名为“movielens”的数据库中。在命令行中输入以下命令来进行导入:

mysql -u root -p

CREATE DATABASE movielens;

USE movielens;

source /path/to/movielens.sql;

注意:你需要将“/path/to/”替换为你的SQL文件的路径。

下面的实例代码中,我们将使用pandas.read_sql()函数来读取movielens数据库中的数据,并将其保存到一个DataFrame中。

2.1 读取整张表中的数据

如果你想要读取整张表中的数据,可以使用以下代码:

import pandas as pd

import pymysql

# 创建连接

conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='123456', db='movielens', charset='utf8')

# 创建游标

cur = conn.cursor()

# 读取数据

cur.execute("SELECT * FROM ratings")

result = cur.fetchall()

# 将数据保存到DataFrame中

df = pd.DataFrame(list(result), columns=['userID', 'movieID', 'rating', 'timestamp'])

# 关闭游标和连接

cur.close()

conn.close()

print(df.head())

在这段代码中,我们首先使用pymysql模块来创建一个MySQL连接对象conn,然后使用该对象来创建一个游标对象cur,用于执行SQL语句。接着,我们使用cur.execute()函数执行SQL查询语句,并使用fetchall()函数获取查询结果。最后,我们将查询结果转换成一个DataFrame对象,并将每个字段的名称指定为“userID”、“movieID”、“rating”和“timestamp”。

运行该代码,你将看到如下输出结果:

   userID  movieID  rating   timestamp

0 1 1 4.0 964982703

1 1 3 4.0 964981247

2 1 6 4.0 964982224

3 1 47 5.0 964983815

4 1 50 5.0 964982931

从输出结果可以看出,数据已经成功读取到DataFrame中。

2.2 读取部分数据

如果你想要读取部分数据,可以在SQL查询语句中添加条件语句。例如,如果你只想要读取评分数据中userID为1的记录,可以使用以下代码:

import pandas as pd

import pymysql

# 创建连接

conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='123456', db='movielens', charset='utf8')

# 创建游标

cur = conn.cursor()

# 读取数据

cur.execute("SELECT * FROM ratings WHERE userID=1")

result = cur.fetchall()

# 将数据保存到DataFrame中

df = pd.DataFrame(list(result), columns=['userID', 'movieID', 'rating', 'timestamp'])

# 关闭游标和连接

cur.close()

conn.close()

print(df.head())

运行该代码,你将看到如下输出结果:

   userID  movieID  rating   timestamp

0 1 1 4.0 964982703

1 1 3 4.0 964981247

2 1 6 4.0 964982224

3 1 47 5.0 964983815

4 1 50 5.0 964982931

从输出结果可以看出,只有userID为1的记录被读取到了DataFrame中。

2.3 读取指定字段

如果你只想要读取表中的部分字段,可以在SQL查询语句中指定所需的字段名称。例如,如果你只想要读取评分数据中的userID和rating字段,可以使用以下代码:

import pandas as pd

import pymysql

# 创建连接

conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='123456', db='movielens', charset='utf8')

# 创建游标

cur = conn.cursor()

# 读取数据

cur.execute("SELECT userID, rating FROM ratings")

result = cur.fetchall()

# 将数据保存到DataFrame中

df = pd.DataFrame(list(result), columns=['userID', 'rating'])

# 关闭游标和连接

cur.close()

conn.close()

print(df.head())

运行该代码,你将看到如下输出结果:

   userID  rating

0 1 4.0

1 1 4.0

2 1 4.0

3 1 5.0

4 1 5.0

从输出结果可以看出,只有userID和rating两个字段被读取到了DataFrame中。

2.4 使用参数

pandas.read_sql()函数还包含了许多参数,可以帮助你实现各种不同的读取数据的需求。下面我们将介绍其中一些常用的参数。

2.4.1 使用params参数

params参数可以帮助你在SQL查询语句中使用占位符,以避免SQL注入攻击。以下是一个例子:

import pandas as pd

import pymysql

# 创建连接

conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='123456', db='movielens', charset='utf8')

# 创建游标

cur = conn.cursor()

# 读取数据

cur.execute("SELECT * FROM ratings WHERE userID=%s", (1,))

result = cur.fetchall()

# 将数据保存到DataFrame中

df = pd.DataFrame(list(result), columns=['userID', 'movieID', 'rating', 'timestamp'])

# 关闭游标和连接

cur.close()

conn.close()

print(df.head())

在这段代码中,我们使用占位符“%s”来代替SQL语句中的参数,然后将参数值传递给params参数。这样就能够防止SQL注入攻击。

2.4.2 使用chunksize参数

chunksize参数可以帮助你将大量数据分成小块进行读取。这可以有效减少内存的使用,并且可以避免程序崩溃。以下是一个例子:

import pandas as pd

import pymysql

# 创建连接

conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='123456', db='movielens', charset='utf8')

# 创建游标

cur = conn.cursor()

# 读取数据

for df in pd.read_sql("SELECT * FROM ratings", con=conn, chunksize=10000):

print(df.head())

# 关闭游标和连接

cur.close()

conn.close()

在这段代码中,我们将chunksize参数设置为10000,表示每次读取10000条数据。然后使用for循环遍历每一个DataFrame,依次处理每一块数据。

3. 总结

pandas.read_sql()函数是一个常用的函数,可以帮助你读取SQL数据库中的数据,并将其转换为Pandas中的DataFrame格式。通过本文介绍的实例,你可以学会如何使用该函数来读取整张表中的数据、读取部分数据、读取指定字段以及使用参数等操作。

后端开发标签