写个不到百行的SQL提取小工具,简单又实用还挺方便的
- 问答
- 2026-01-05 05:37:01
- 17
这个不到百行的SQL提取小工具,是我在网上冲浪时,看到一个程序员分享的“如何用Python快速搞定临时数据需求”的讨论串时得到的灵感,那个楼主说他经常要连接各种数据库,执行一些简单的查询,然后把结果导出来,他厌倦了每次都要打开笨重的数据库管理工具,或者写一堆重复的连接代码,于是就自己写了个小脚本,我觉得这个想法特别实用,就根据他的核心思路,自己动手丰衣足食,写了一个更符合我个人习惯的版本。
这个小工具的核心目标就一句话:让你用最少的操作,从一个SQL数据库中提取数据,并保存成常用的文件格式,比如CSV或者Excel,它不追求管理数据库,不追求执行复杂的建表、修改操作,就只干“提取”这一件事。
整个工具的代码,算上空格和注释,也就七八十行的样子,下面我就把它拆开揉碎了讲给你听,你甚至不需要是编程高手,只要稍微懂一点Python的基础知识,就能看懂并用起来。
我们需要几个帮手,也就是Python的库,这些库不是我自己写的,是现成的、非常强大的工具,我们用argparse来处理命令行参数,这样就不用每次都去改代码里的设置;用pandas来对付数据,它是数据处理的神器;还需要一个数据库驱动,比如pymysql(针对MySQL)、psycopg2(针对PostgreSQL)或者cx_Oracle(针对Oracle),看你连什么数据库就装哪个,这些库都可以用pip命令一键安装。
工具的主体是一个Python脚本,比如我给它起名叫sqlextract.py,它的工作流程非常直白:
第一步,接收你的指令,当你打开命令行(比如Windows的CMD或者Mac的Terminal),你会输入类似这样的一串命令:
python sqlextract.py -H "localhost" -u "myuser" -p "mypassword" -d "mydatabase" -q "SELECT * FROM orders WHERE date > '2023-01-01'" -f "output.xlsx"
这串命令看起来有点长,但其实就是在告诉脚本:嘿,去连接一台叫localhost的服务器(通常就是你自己电脑),用用户名myuser和密码mypassword,登录到mydatabase这个数据库,然后帮我运行SELECT * FROM orders WHERE date > '2023-01-01'这条SQL查询语句,最后把查到的结果保存成一个名叫output.xlsx的Excel文件。

脚本里的argparse库就是负责解读你这串命令的,它会把-H识别为主机地址,-u后面的是用户名,等等,这样,所有的配置信息都从命令行来,脚本本身非常干净,不用写死任何东西。
第二步,连接数据库,脚本拿到你提供的数据库地址、用户名、密码、数据库名之后,就会调用相应的数据库驱动(比如pymysql),去建立一个网络连接,这个过程就像你用账号密码登录一个网站一样,代码里大概就一两行,建立一个连接对象。
第三步,执行SQL查询,连接成功后,脚本会把你写在-q参数后面的那条SQL语句,通过连接发送给数据库服务器,数据库服务器收到指令后,会乖乖地执行查询,然后把结果整理好,准备发回来。
第四步,用pandas接管数据,这是最关键的一步,也是让代码变得简短的核心,我们不让脚本自己一行一行地去读数据库返回的结果,而是直接把整个结果集丢给pandas的read_sql_query函数,这个函数超级厉害,它能自动把数据库返回的表格式数据,转换成pandas的DataFrame格式,DataFrame你可以理解成一个超级强大的智能表格,pandas为它准备了无数好用的功能。

第五步,保存文件,数据已经到了pandas的DataFrame里,剩下的事情就简单得不像话了,pandas的DataFrame对象自带了to_csv和to_excel这样的方法,你想存成CSV,就写df.to_csv('output.csv');想存成Excel,就写df.to_excel('output.xlsx'),一句代码就搞定,CSV文件可以用Excel直接打开,也是通用的数据交换格式。
脚本还会贴心地做一些收尾工作,比如关闭之前打开的数据库连接,释放资源。
你看,整个逻辑就是这么清晰:接收参数 -> 连接数据库 -> 执行SQL -> 用pandas接住数据 -> 保存成文件,每个步骤都有现成的、非常成熟的库来帮忙,所以我们自己的代码只需要像胶水一样,把这些步骤粘合起来就行,自然就短小精悍了。
这个小工具的好处是显而易见的,首先就是快,无论是写起来快还是用起来快,对于那种临时的、简单的数据提取需求,你再也不需要启动那个可能占几百兆内存的庞然大物(数据库管理工具)了,打开命令行,敲一行指令,回车,结果文件瞬间生成,其次是非常灵活,因为查询语句和输出文件名都是参数,你完全可以写一个批处理脚本(.bat或.sh),一次性执行多个提取任务,它还很强大,得益于pandas的加持,你甚至可以在脚本里加一点点代码,对提取出来的数据做简单的清洗、处理再导出,不过这已经超出“不到百行”和“简单提取”的范畴了,算是留给你的一个可扩展空间。
它很简陋,没有图形界面,无法可视化地查看表结构,错误提示也可能比较技术化,但正如那个讨论串里的楼主所说,对于程序员、数据分析师或者需要频繁和数据库打交道的运维人员来说,这样一个专一的小工具,往往是效率提升的利器,它把复杂留给了背后强大的开源库,把极致简便留给了使用者。
本文由寇乐童于2026-01-05发表在笙亿网络策划,如有疑问,请联系我们。
本文链接:https://www.haoid.cn/wenda/74767.html
