Python使用Pandas导入数据库sql
- 一、前言
- 二、准备工作
- 三、从数据库导入数据到Pandas
一、前言
对于关系数据库的访问,Python社区已经制定出一个标准,称为Python Database API Specification。Mysql,Oracal等特定数据库模块都遵从这一规范,所以即便对于不同的数据库诸如sqlite, mysql, oracle等等, Python都可通过对应的数据库适配器模块来对它们进行访问, 且这些数据库模块遵循的接口标准都是统一的。
关于这方面的具体内容,可以参考我的另一篇博文:
Python数据库编程之关系数据库API规范
二、准备工作
本文用例使用的数据库是MySql, 这里假设你已经安装好MySql数据库并且创建好了对应的表。
关于Windows系统上安装并使用MySql的相关内容,可以参考我的另一篇博文:
如何在Windows上安装并启动MySql
关于Python如何与MySql数据库进行交互,可以参考我的另一篇博文:
Python基础之MySql数据库交互
三、从数据库导入数据到Pandas
Python从数据库导入数据到Pandas,需要经历两个步骤:
-
python与数据库进行连接
-
python执行sql查询
老的书写方式(执行后pandas会报一条warning log)
import pymysql
import pandas as pd
host = 'localhost'
user = 'root'
passwd = '123456'
db = 'mytestdb'
conn = pymysql.connect(host=host,
user=user,
passwd=passwd,
db=db,
charset='utf8')
sql = 'SELECT * FROM students'
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
df = pd.read_sql(sql, conn)
print(df)
新的书写方式(需要安装sqlalchemy库):
from sqlalchemy import create_engine
import pandas as pd
MYSQL_HOST = 'localhost'
MYSQL_PORT = '3306'
MYSQL_USER = 'root'
MYSQL_PASSWORD = '123456'
MYSQL_DB = 'mytestdb'
engine = create_engine('mysql+pymysql://%s:%s@%s:%s/%s?charset=utf8'
% (MYSQL_USER, MYSQL_PASSWORD, MYSQL_HOST, MYSQL_PORT, MYSQL_DB))
sql = 'SELECT * FROM students'
df = pd.read_sql(sql, engine)
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
print(df)
加上pd.set_option这两行的原因是:
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
因为我们的表格中有中文,中文占用的字符和英文、数字占用的字符不一样,因此需要调用pd.set_option()使表格对齐显示。如果你是使用 Jupyter 来运行代码的,Jupyter 会自动渲染出一个表格,则无需这个设置。