美文网首页
[分享] [自制小工具] 在终端对MySQL表进行简单操作的Py

[分享] [自制小工具] 在终端对MySQL表进行简单操作的Py

作者: 張貳龍 | 来源:发表于2020-08-13 13:46 被阅读0次

    一、背景

    由于近期处于长期找工作的状态,而且有使用数据库记录事情的习惯(主要为了练习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

    三、功能介绍

    小工具共有三个功能:

    1. 通过关键字对数据表进行检索;
    2. 添加新的申请记录;
    3. 对已有记录进行数据的更新。

    (以下使用测试数据进行介绍)

    (一)开始

    开始

    首次运行需输入数据库密码进行连接。(这里有个明显的缺点,密码是显式输入的,从网上搜索到的解决方案是通过安装一个getpass库来解决,不过这里没有实践)

    image-20200812231511480.png

    (二)检索

    检索

    输入0进行检索操作,然后会提供表的所有列名,按照索引选择列名,输入相应的关键字即可进行检索。(这里是按照like '%关键字%'的方式进行检索)

    还可以同时选择多列,使用半角逗号(,)分隔即可,效果如下:

    多列检索

    (三)添加

    添加

    添加过程主要有以下几步:

    1. 输入公司名称及简称。首先通过公司名称关键字进行检索,查出表中已有的公司名称及其简称,如果与要插入的公司名称一致,直接通过索引进行选择即可,这样主要是为了避免同一公司录入名称不同的情况;如果没有查到,也可手动输入。
    2. 依次输入其他相关字段,方式类似。
    3. 最后,部分字段需要完全手动输入。(因这些字段的值存在重复的可能性较小,所以不采用上面的方式)

    通过以上几步即可完成添加。

    (四)更新

    更新(1) 更新(2)

    更新申请信息需先检索出相关记录(操作方式同检索部分),然后提供想要更新的记录的idx(表中的主键),最后选择列名并输入新值进行更新。

    (五)退出

    在输入命令的地方输入exitquitq中任意一个即可退出。

    退出

    四、其他说明

    (一)关于表结构

    由于数据量不会太大,且暂不会与其他表产生关联,所以在建表的时候没有遵循相关范式。代码是基于以下表结构写成:

    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_sqlpandas.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。由于我不是专业开发人员,所以代码可能会很业余,如果大家发现其中有错误、不妥,或有更好的建议,还请不吝赐教,谢谢!

    相关文章

      网友评论

          本文标题:[分享] [自制小工具] 在终端对MySQL表进行简单操作的Py

          本文链接:https://www.haomeiwen.com/subject/cqubdktx.html