如何用Python自动操作数据库?

林骥

共 3248字,需浏览 7分钟

 ·

2020-11-22 20:43

你好,我是林骥。

我在使用 Python 之前,做数据分析工作的流程,一般是先打开数据库客户端,然后运行一段写好的 SQL 语句,把数据查询出来,然后再把数据复制到 Excel 中并制作报表。
在使用 Python 之后,这些工作都可以变成自动化,从而让我有更多的时间,去思考和解决业务相关的问题,而不是陷入重复使用工具的手动操作。
吴军在《数学之美》中说:
技术其实分为术和道两种,具体的做事方法是术,做事的原理和原则是道。
很多具体的技术,很快就会落伍,所以只追求术的人,一辈子会很辛苦,还容易被淘汰。只有理解了事物的本质和精髓,才能做到游刃有余。要想真正做好一件事,其实离不开长期的刻意练习。
我写的很多文章,在介绍「术」的同时,也希望能够传达「道」的理念,也就是把工具和思维相结合。
今天介绍的技术,是用 Python 自动操作数据库的方法。
1. 安装和导入模块
以 Python 中的 SQLAlchemy 模块为例,配合使用其他第三方模块,SQLAlchemy 能够操作各种数据库,包括 Oracle、PostgreSQL、MySQL、SQLite、SQL Server 等等,如果你还没有安装,可以通过以下命令进行安装:
pip install sqlalchemy
要测试 SQLAlchemy 模块是否正确安装,可以在 Jupyter Lab 中运行以下代码:
# 导入库import sqlalchemy as sa
# 查看 SQLAlchemy 版本sa.__version__
如果该模块正确安装,就会输出版本号,我目前使用的版本是 1.3.20。
不同的数据库,需要安装不同的第三方模块,比如说,要操作 Oracle,那么通常需要先安装 cx_Oracle:
pip install cx_Oracle
2. 连接数据库
在开始操作数据库之前,需要先创建一个数据库引擎,然后再连接数据库:
from sqlalchemy import create_engine
# 创建数据库引擎engine = create_engine('oracle://user:password@ip_address:1521/orcl')
# 连接数据库con = engine.connect()
其中用户名、密码和 IP 地址等基本信息,要根据自己的实际情况进行修改。
3. 创建表
为了演示用 Python 自动操作数据库,假设你的数据库账号拥有创建表的权限,那么就可以执行下面的语句,实现创建一个新的表:
# 执行创建表的 SQL 语句sql = 'create table usr(id integer, name varchar2(50))'con.execute(sql)
4. 增删改查
数据库的常用操作包括增、删、改、查,下面分别简单演示一下。
首先,增加两行模拟用的数据:
# 增con.execute("insert into usr(id, name) values(1, 'Jim')")con.execute("insert into usr(id, name) values(2, 'Joe')")
其次,删除其中一行:
# 删con.execute('delete from usr where id = 1')
然后,修改另一行数据:
# 改con.execute("update usr set name = 'Jack' where id = 2")
虽然 SQLAlchemy 非常强大,但是如果能配合 Pandas 一起使用,那么就能双剑合璧,从而更好地解决数据处理和分析的问题。
比如说,按条件查询指定的数据:
# 查sql = 'select id, name from usr where id = :id'import pandas as pddf = pd.read_sql(sa.text(sql), engine, params={'id': 2})
df

id
name
0
2
Jack
5. 数据备份和删除表
有时候,我们还需要把数据备份到数据库中,如果直接使用 Pandas 的 to_sql 函数,那么字符串类型的列会被自动存储为 CLOB,这样后续处理起来就会比较麻烦。
我们可以用一个函数,实现自动转换为 NVARCHAR 类型:
from sqlalchemy.types import NVARCHAR, Float, Integer
# 映射数据中的列与数据类型,避免存为 CLOBdef mapping_df_types(df): dtypedict = {} for i, j in zip(df.columns, df.dtypes): if "object" in str(j): dtypedict.update({i: NVARCHAR(length=255)}) if "float" in str(j): dtypedict.update({i: Float(precision=2, asdecimal=True)}) if "int" in str(j): dtypedict.update({i: Integer()}) return dtypedict
# 把数据备份到数据库,替换现有表,如果把 replace 换成 append,那么就是附加数据dtypedict = mapping_df_types(df)df.to_sql('usr_backup', engine, index=False, if_exists='replace', dtype=dtypedict)
这个功能还可以应用于不同数据库之间的数据迁移。比如说,从一个 MySQL 数据库中查询指定的数据,保存为 df,然后再附加到 Oracle 数据库中。
如果设置好相应的定时任务,就能实现用 Python 自动操作数据库,从而自动完成相关工作。
最后,我们删除上面演示用的两个表,并关闭数据库连接,节约资源,减少浪费,这是一个很好的习惯。
# 删除表con.execute('drop table usr')con.execute('drop table usr_backup')
# 关闭数据库连接con.close()
小结
本文介绍了用 Python 自动操作数据库的一些常用方法,从 SQLAlchemy 和 cx_Oracle 模块的安装和导入,到连接数据库,再到创建表和增删改查,最后对数据进行备份和删除表,这些操作都可以在 Jupyter Lab 中一键执行,自动完成一些数据库的相关操作。
事实上,你可以根据自己的实际情况,修改数据库的类型和字符串连接等信息,并执行各种各样的 SQL 语句,自动完成更加复杂的数据库操作。
随着机器变得越来越智能,许多工作都变得越来越自动化,导致很多人担心被机器抢了饭碗,忧虑遭遇中年危机,这也是人之常情,但我们要学会积极应对。
虽然数据分析的工具变化得很快,但数据分析的思维基本不变,而且方法总比困难多。如果我们把新的技术工具,与数据分析的思维相结合,应用于实际工作中,洞察事物的本质,那么就能更好地完成自己的工作,从而创造更大的价值。

往期推荐

用Python自动生成Excel报表

用Python自动生成数据分析报告

如何用 Python 分析数据?


长按下方的二维码,关注林骥的公众号,更多干货早知道。
欢迎加入我的免费知识星球,我每天都会在星球内分享读书笔记和思考感悟,点击左下角的阅读原文即可加入。
浏览 54
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报