[分享] [自制小工具] 在终端对MySQL表进行简单操作的Py
一、背景
由于近期处于长期找工作的状态,而且有使用数据库记录事情的习惯(主要为了练习SQL),所以把投递简历的申请记录在数据库中,也方便后续的总结分析。
但是手动输入SQL语句来进行操作比较麻烦,用存储过程做交互的效果不是太好,同时又学过Python,所以尝试动手写了一个小脚本工具,用来进行交互式的操作,解放双手。
如果有同学有类似的需求,拿来按照实际情况改一改就可以使用了。
二、运行环境
- OS: Manjaro 20.0.3
- Python: 3.7.6
- pymysql: 0.9.3
- pandas: 1.0.1,需安装依赖tabulate
- DBMS: MySQL 8.0.21
三、功能介绍
小工具共有三个功能:
- 通过关键字对数据表进行检索;
- 添加新的申请记录;
- 对已有记录进行数据的更新。
(以下使用测试数据进行介绍)
(一)开始
开始首次运行需输入数据库密码进行连接。(这里有个明显的缺点,密码是显式输入的,从网上搜索到的解决方案是通过安装一个getpass库来解决,不过这里没有实践)
image-20200812231511480.png(二)检索
检索输入0
进行检索操作,然后会提供表的所有列名,按照索引选择列名,输入相应的关键字即可进行检索。(这里是按照like '%关键字%'
的方式进行检索)
还可以同时选择多列,使用半角逗号(,
)分隔即可,效果如下:
(三)添加
添加添加过程主要有以下几步:
- 输入公司名称及简称。首先通过公司名称关键字进行检索,查出表中已有的公司名称及其简称,如果与要插入的公司名称一致,直接通过索引进行选择即可,这样主要是为了避免同一公司录入名称不同的情况;如果没有查到,也可手动输入。
- 依次输入其他相关字段,方式类似。
- 最后,部分字段需要完全手动输入。(因这些字段的值存在重复的可能性较小,所以不采用上面的方式)
通过以上几步即可完成添加。
(四)更新
更新(1) 更新(2)更新申请信息需先检索出相关记录(操作方式同检索部分),然后提供想要更新的记录的idx
(表中的主键),最后选择列名并输入新值进行更新。
(五)退出
在输入命令的地方输入exit
、quit
、q
中任意一个即可退出。
四、其他说明
(一)关于表结构
由于数据量不会太大,且暂不会与其他表产生关联,所以在建表的时候没有遵循相关范式。代码是基于以下表结构写成:
Table Structure:
+--------------+----------+------+-----+-------------------+-------------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+----------+------+-----+-------------------+-------------------+
| idx | int | NO | PRI | NULL | auto_increment |
| title | text | YES | | NULL | |
| company | text | YES | | NULL | |
| co_abbr | text | YES | | NULL | |
| city | text | YES | | NULL | |
| salary_floor | double | YES | | NULL | |
| salary_cap | double | YES | | NULL | |
| source | text | YES | | NULL | |
| channel | char(15) | YES | | NULL | |
| apply_time | datetime | YES | | CURRENT_TIMESTAMP | DEFAULT_GENERATED |
| viewed | int | YES | | NULL | |
| feedback | text | YES | | NULL | |
| interview | int | YES | | NULL | |
| remarks | text | YES | | NULL | |
| url | text | YES | | NULL | |
+--------------+----------+------+-----+-------------------+-------------------+
(二)关于用到的Python库
在一开始为了可以适用于多种DBMS,用的是sqlalchemy,但是相对于我的这种小脚本,用ORM有点大材小用的样子,所以选择了pymysql。
为了方便格式化输出查询出的表格,用到了pandas.read_sql
、pandas.DataFrame.to_markdown
方法,在实际使用的时候发现,这个方法还需要依赖tabulate
库,体积很小,安装一下就可以了。
(三)关于操作系统
在脚本中用到了shell命令clear
,用来在终端清屏,在Windows下将其改成cls
即可。
不过既然已经在用Windows,应该不大用得到这种小工具了,安装MySQL提供的MySQL For Excel应该就可以完美的解决这些问题。(参考:https://www.w3resource.com/mysql/exporting-and-importing-data-between-mysql-and-microsoft-excel.php)
(四)关于代码
算上注释不过二百多行,而且只有一个小文件,没有必要传到代码仓库,所以传到网盘供有需求的同学自取(链接: https://pan.baidu.com/s/17fB4a3AbjgYqv12PRReY_g 提取码: zw8k),下载后修改一下数据库连接信息,以及相应的表名、列名等即可。有兴趣的同学还可以加点代码通过读取自己的配置信息,使代码更加可定制化。
五、结语
此次制作这个工具主要是为了日常操作方便,同时练习一下Python。由于我不是专业开发人员,所以代码可能会很业余,如果大家发现其中有错误、不妥,或有更好的建议,还请不吝赐教,谢谢!