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

公众号后台回复“图书“,了解更多号主新书内容

 作者:林骥

 来源:林骥

我在使用 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 语句,自动完成更加复杂的数据库操作。

随着机器变得越来越智能,许多工作都变得越来越自动化,导致很多人担心被机器抢了饭碗,忧虑遭遇中年危机,这也是人之常情,但我们要学会积极应对。

虽然数据分析的工具变化得很快,但数据分析的思维基本不变,而且方法总比困难多。如果我们把新的技术工具,与数据分析的思维相结合,应用于实际工作中,洞察事物的本质,那么就能更好地完成自己的工作,从而创造更大的价值。

◆ ◆ ◆  ◆ ◆
麟哥新书已经在京东上架了,我写了本书:《拿下Offer-数据分析师求职面试指南》,目前京东正在举行100-40活动,大家可以用相当于原价5折的预购价格购买,还是非常划算的:

数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。

管理员二维码:


猜你喜欢

● 卧槽!原来爬取B站弹幕这么简单● 厉害了!麟哥新书登顶京东销量排行榜!● 笑死人不偿命的知乎沙雕问题排行榜
● 用Python扒出B站那些“惊为天人”的阿婆主!● 你相信逛B站也能学编程吗

你可能感兴趣的:(数据库,python,mysql,数据分析,java)