
如果你不知道如何将Python与MySQL连接,请查看如何将Python与MySQL连接指南。在该教程中,我简要地描述了在Python3中需要使用哪些模块来连接MySQL服务器并从数据库中获取数据。
Pandas SQL到DataFrame
要在Pandas中把 SQL 转换为DataFrame,可以使用**pd.read_sql_query()**函数。Pandas read_sql_query()是一个内置的库函数,可以将SQL查询读取到一个DataFrame。read_sql_query()函数返回一个对应于查询字符串结果集的DataFrame。可以选择提供一个index_col参数来使用其中一列作为索引;否则,将使用默认的整数索引。
让我们来看看步骤。
- 创建MySQL数据库和表。
- 导入Pandas和pymysql包。
- 用pymysql.connect()函数将Python连接到MySQL。
- 读取SQL查询。
- 使用pd.DataFrame()函数将变量值转换成DataFrame。
步骤1:创建MySQL数据库和表
有很多方法可以做到这一点,但我们要做的是最短的。
我使用的是MAMP服务器,所以phpmyadmin就在那里。
现在,默认情况下,有一个已经创建的用户,叫做root。
所以,这个用户的用户名和密码是root和root。
现在, 我已经创建了一个名为laravel7crud的数据库**。**
我已经创建了一个名为coronas 的表,并插入了两行。
我的最终表是下面这个。
现在,我们将读取SELECT查询,它获取了所有的两行,我们将把这个SQL数据转换为DataFrame。
第二步:导入Pandas和pymysql
我们正在使用pymysql包来连接Python和MySQL数据库。所以,你必须安装这个包。 如果你还没有安装这个包,请查看这个安装链接。
你还需要安装Pandas包。所以,如果你没有安装它,那么输入以下命令。
python3 -m pip install pandas
我的默认版本是Python 3.8。所以,在上面的命令中,我使用的是python3。
python --version
Python 3.8.2
现在,创建一个名为app.py 的Python编程文件,并导入这些包。
# app.py
import pymysql
import pandas as pd
第3步:用connect()连接Python和MySQL
PyMySQL是一个基于PEP249的纯Python MySQL客户端库。大多数公共API都与mysqlclient和MySQLdb兼容。PyMySQL可以与MySQL 5.5+和MariaDB 5.5+一起工作。
pymysql.connect() 函数需要以下四个参数。
- 主机名
- 用户名
- 密码
- 数据库
请看下面的代码。
# app.py
import pymysql
import pandas as pd
dbcon = pymysql.connect("localhost", "root", "root", "laravel7crud")
第4步:读取SQL查询
pd.read_sql_query() 函数在参数中接收SQL查询和连接对象。在我们的例子中,它是一个SQL SELECT语句和dbcon对象。
# app.py
import pymysql
import pandas as pd
dbcon = pymysql.connect("localhost", "root", "root", "laravel7crud")
try:
SQL_Query = pd.read_sql_query(
'''select
symptoms,
country_name,
cases
from coronas''', dbcon)
第5步:使用pd.DataFrame()将变量转换成DataFrame。
Pandas DataFrame是二维的、大小可变的、可能是异质的表格数据。该数据结构还包含了标记的轴(行和列)。算术运算在行和列的标签上对齐。它可以被认为是字典,是一个系列对象的容器。主要的pandas数据结构。
让我们用下面的代码将SQL_Query变量转换成DataFrame。
# app.py
df = pd.DataFrame(SQL_Query, columns=['symptoms', 'country_name', 'cases'])
print(df)
print(type(df))
DataFrame需要两个参数:
- SQL查询数据
- 列。我们将其命名为与SQL表的列名相同。
然后我们打印了DataFrame和它的数据类型。
因此,我们的最终代码看起来像下面这样。
# app.py
import pymysql
import pandas as pd
dbcon = pymysql.connect("localhost", "root", "root", "laravel7crud")
try:
SQL_Query = pd.read_sql_query(
'''select
symptoms,
country_name,
cases
from coronas''', dbcon)
df = pd.DataFrame(SQL_Query, columns=['symptoms', 'country_name', 'cases'])
print(df)
print('The data type of df is: ', type(df))
except:
print("Error: unable to convert the data")
dbcon.close()
输出结果
python3 app.py
symptoms country_name cases
0 Fever India 29000
1 Cough USA 3000000
The data type of df is: <class 'pandas.core.frame.DataFrame'>
从输出结果中,你可以看到,我们已经成功地将SQL表转换为Pandas DataFrame。
本教程到此结束。
