Python使用Pandas导入数据库sql

一、前言

对于关系数据库的访问,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)

20221223234701

加上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 会自动渲染出一个表格,则无需这个设置。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smart_cat

你的鼓励将是我写作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值