引言

那一年过年前,疫情开始爆发,对全国人民的生活和工作造成了严重的影响。但凭借着国家强盛的实力,新冠疫苗也很快的被技术人员研发出来,人们通过接种新冠疫苗来抵御新冠病毒的危害。本次通过接种新冠疫苗的这个数据统计,来设计“疫苗接种数据库”,存储人们接种疫苗的相关信息,并实现“增删改查”等基本操作以及其他的拓展功能。

国内新冠疫苗人员接种后,如果不通过数据统计到数据库,数据量之大,数据查询,数据核实,数据更改等工作会非常不方便,通过编程语言,设计疫苗接种数据库,来存储接种疫苗相关数据,能使得工作人员和接种人员的工作量大大减少,从而减少工作负担,节省时间,减少更多的财力损失,实现更好的数据管理,是一种非常高效、精确、快捷、方便的方式。

一、数据库信息

本次数据库设计一共四张表,分别为《接种人员(person)》、《生产厂家(manufacturer)》、《疫苗信息(vaccine)》、《接种信息(inject_info)》。

  • 《接种人员》表的数据项:姓名,身份证号,生日,性别,家庭住址,联系电话,不良反应。
  • 《生产厂家》表的数据项:厂家名称,厂家编号,厂家地址,联系人,联系人电话。
  • 《疫苗信息》表的数据项:疫苗名称,疫苗编号,疫苗品种,疫苗厂家编号,生产日期,过期时间。
  • 《接种信息》表的数据项:接种编号,接种疫苗编号,疫苗品种,接种剂次,接种人姓名,接种人身份证号,接种时间,接种单位。

主要阶段

  • 确定选题:《课程设计-疫苗接种数据库》。
  • 需求分析:《数据库数据字典》,编程语言为:python mysql

二、关键代码展示

1、app.py(主函数)

if __name__ == '__main__':
    # 全局变量初始化
    gol._init()
    # # 课题背景信息
    # menu.course_background()
    #
    # # 打印小组成员信息
    # menu.team_info()
    # 连接数据库信息
    db.connect_to_db(config.db_host, config.db_user, config.db_password, config.db_name)
    # 跳出数据库的标志 
    flag = True
    while (flag):
        menu.main_menu()
        cin = input("请输入要执行操作:")
        choice = int(cin) if cin.isdigit() else config.DEFAULT_INPUT
        if choice == 0:
            print("您已选择退出,感谢您的操作体验")
            break
        elif choice == config.OP_TYPE_ADD:
            # ----------------------添加----------------------------
            mgr_add.add_data()
            print(config.END_OP_TEXT)
            input()
        elif choice == config.OP_TYPE_DELETE:
            # ----------------------删除----------------------------
            mgr_delete.do_delete()
            print(config.END_OP_TEXT)
            input()
        elif choice == config.OP_TYPE_SELECT:
            # ----------------------查找----------------------------
            mgr_selector.do_select()
            print(config.END_OP_TEXT)
            input()
        elif choice == config.OP_TYPE_UPDATE:
            # ----------------------修改----------------------------
            mgr_update.do_update()
            print(config.END_OP_TEXT)
            input()
        else:
            print("操作选项输入错误,请重新输入")
    db.close_db_link()

2、mgr_update.py(更新)

def do_update():
    menu.update_menu_total()
    cin = util.get_user_input(5)
    if cin == 0:
        return
    if cin == config.TYPE_1:
        do_update_person()
    if cin == config.TYPE_2:
        do_update_inject_info()
    if cin == config.TYPE_3:
        do_update_vaccine()
    if cin == config.TYPE_4:
        do_update_manufacturer()
def do_update_person():
    # 更新接种人员表
    menu.update_menu_1()
    cin_update = util.get_user_input(4)
    if cin_update == 0:
        return
    # 根据身份证号更新
    cert_no = input("请输入身份证号:")
    table = config.table_dict[config.TYPE_1]
    table_inject_info = config.table_dict[config.TYPE_2]
    if cin_update == 1:
        # 更新姓名
        new_name = input("请输入修改后的姓名:")
        sql1 = "UPDATE %s SET name='%s' WHERE cert_no='%s';" % (table, new_name, cert_no)
        sql2 = "UPDATE %s SET person_name='%s' WHERE person_cert_no='%s';" % (table_inject_info, new_name, cert_no)
        db.execute_sql(sql1)
        db.execute_sql(sql2)
    elif cin_update == 2:
        # 更新电话
        new_phone = input("请输入修改后的接种人联系电话:")
        sql1 = "UPDATE %s SET phone='%s' WHERE cert_no='%s';" % (table, new_phone, cert_no)
        db.execute_sql(sql1)
    elif cin_update == 3:
        # 更新住址
        new_address = input("请输入修改后的家庭住址:")
        sql1 = "UPDATE %s SET address='%s' WHERE cert_no='%s';" % (table, new_address, cert_no)
        db.execute_sql(sql1)

3、mgr_add.py(添加)

def add_data():
    # 添加操作
    add_menu_1()
    # 获取用户输入
    cin = util.get_user_input(5)
    if cin == 0:
        return
    # 获取数据表列
    table = config.table_dict[cin]
    columns = get_table_col(table)
    util.print_log("表的列信息: ",  columns)
    field_list = []
    data_list = []
    for i in columns:
        col_name = i[0]     # 列名
        col_type = i[1]     # 列类型
        col_index_type = i[4]     # 列索引类型
        col_desc = i[8]     # 列值
        # 如果是不需要录入则跳过, 比如 id,person_id 等
        if(col_name in config.SKIP_FIELD_SET):
            continue
        util.print_log("当前列信息", i)
        # 输入值
        if col_type == config.FIELD_TYPE_DATETIME:
            # 日期检查
            a = input("请输入【%s】, 例如 2022-05-02 : " % col_desc)
            input_data_invalid = True
            while(input_data_invalid):
                if(util.is_valid_date(a) == True):
                    break
                a = input("您输入日期不合法,请重新输入,例如 2022-05-02 : ")
        else:
            a = input("请输入【%s】: " % col_desc)
        # 判断唯一关键字是否重复
        if col_index_type == 'UNI':
            sql = '''
                SELECT 1 FROM  %s  
                WHERE %s = %s 
            ''' % (table, col_name, a)
            util.print_log("查重 sql: ", sql)
            cursor = gol.get_value('cursor')
            exist_in_table = 1
            while exist_in_table == 1:
                dup_result = cursor.execute(sql)
                if dup_result == 0:
                    break
                # 如果重复则重新输入
                a = input("您输入与表中信息重复,请重新输入【%s】" % col_name)
        field_list.append(col_name)
        data_list.append(a)
    # 输入完成,组装数据
    field_str = ",".join(field_list)
    data_tuple = tuple(data_list)
    # 拼接数据
    sql = '''
        INSERT INTO %s(%s) VALUES %s;
    ''' % (table, field_str, data_tuple)
    util.print_log(sql)
    cursor = gol.get_value('cursor')
    cursor.execute(sql)
    # 提交数据
    conn = gol.get_value('conn')
    conn.commit()
    util.print_log("%s 表成功插入数据 %s" % (table, data_tuple))
    return 0

4、mgr_delete.py(删除)

def do_delete():
    # 删除操作
    menu.delete_menu_total()
    # 获取输入
    cin = util.get_user_input(5)
    if cin == 0:
        return
    if cin == config.TYPE_1:
        do_delete_person()
    if cin == config.TYPE_2:
        do_delete_inject_info()
    if cin == config.TYPE_3:
        do_delete_vaccine()
    if cin == config.TYPE_4:
        do_delete_manufacturer()
def do_delete_vaccine():
    # 删除疫苗信息
    # 打印菜单
    menu.delete_menu_3()
    # 获取用户输入
    cin = util.get_user_input(2)
    if cin == 0:
        return
    delete_value = input("请输入具体信息:")
    # 获取相关表
    table = config.table_dict[config.TYPE_3]
    table2 = config.table_dict[config.TYPE_2]
    # 接种编号
    if cin == 1:
        sql1 = '''
            DELETE FROM %s WHERE vaccine_no='%s' 
            ''' % (table, delete_value)
        sql2 = '''
            DELETE FROM %s WHERE vaccine_no='%s' 
            ''' % (table2, delete_value)
        db.execute_sql(sql1)
        db.execute_sql(sql2)

5、mgr_selector.py(查找)

def do_select():
    # 执行查询
    menu.select_menu_total()
    # 获取输入
    cin = util.get_user_input(5)
    if cin == 0:
        return
    if cin == config.TYPE_1:
        # ------------------查找接种人员相关信息----------------
        do_select_person()
    elif cin == config.TYPE_2:
        # ------------------查找接种信息-----------------------
        do_select_inject_info()
    elif cin == config.TYPE_3:
        # ------------------查找疫苗信息-----------------------
        do_select_vaccine()
    elif cin == config.TYPE_4:
        # ------------------查找生产企业相关信息-----------------------
        do_select_manufacturer()
def do_select_vaccine():
    # 查找疫苗信息
    menu.select_menu_3()
    cin = util.get_user_input(5)
    if cin == 0:
        return
    # 获取搜索数据
    cin2 = input("请输入搜索数据:")
    table = config.table_dict[config.TYPE_3]
    query_value = cin2
    # 结果集合
    result = []
    # 疫苗编号
    if cin == 1:
        result = db.query_by_table_field(table, 'vaccine_no', query_value)
    # 厂家编号
    if cin == 2:
        result = db.query_by_table_field(table, 'company_no', query_value)
    # 生产日期
    if cin == 3:
        sql = ''' 
            SELECT * FROM %s  WHERE %s >= '%s' 
            ''' % (table, 'production_at', query_value)
        cursor = gol.get_value('cursor')
        cursor.execute(sql)
        result = cursor.fetchall()
    # 过期时间
    if cin == 4:
        sql = ''' 
            SELECT * FROM %s  WHERE %s <= '%s' 
            ''' % (table, 'expired_at', query_value)
        cursor = gol.get_value('cursor')
        cursor.execute(sql)
        result = cursor.fetchall()
    show_select_vaccine_result(result)

三、数据库数据字典

1、接种人员(person)

字段名 字段标题 字段类型 默认 字段备注
id ID int ID
name 姓名 varchar(32) 姓名
cert_no 身份证号 varchar(32) 身份证号
birthday 生日 datetime 生日
gender 性别 vtinyint(1) 性别
address 家庭住址 varchar(128) 家庭住址
phone 电话 varchar(16) 电话
adverse_effect 不良反应 varchar(64) 不良反应

2、生产厂家(manufacturer)

字段名 字段标题 字段类型 默认 字段备注
id ID int ID
name 厂家名称 varchar(255) 厂家名称
company_no 厂家编号 varchar(32) 厂家编号
address 厂家地址 varchar(255) 厂家地址
contact_person 联系人 varchar(255) 联系人
contact_phone 联系人电话 int 联系人电话

3、疫苗信息(vaccine)

字段名 字段标题 字段类型 默认 字段备注
id ID int ID
name 疫苗名称 varchar(64) ID
vaccine_no 疫苗编号 varchar(64) 疫苗名称
vaccine_type 疫苗品种 datetime(32) 疫苗品种
company_no 疫苗厂家编号 vtinyint(32) 疫苗厂家编号
production_at 生产日期 datetime 生产日期
expired_at 过期时间 datetime 过期时间

4、接种信息(inject_info)

字段名 字段标题 字段类型 默认 字段备注
id ID int ID
inject_no 接种编号 varchar(32) 接种编号
vaccine_no 接种疫苗编号 varchar(32) 接种疫苗编号
vaccine_type 疫苗品种 varchar(32) 疫苗品种
inject_does 接种剂次 varchar(16) 接种剂次
person_name 接种人姓名 varchar(32) 接种人姓名
person_cert_no 接种人身份证号 varchar(32) 接种人身份证号
inject_at 接种时间 datetime 接种时间
inject_company 接种单位 varchar(128) 接种单位

四、运行效果

1、设计背景

2、小组信息

3、主界面

4、新增操作

结果:可见新加的“张三”信息已成功插入。

5、删除操作

结果:可见新加的“张三”信息已成功删除。

6、查询操作

7、修改操作

结果:邓阳华的家庭住址已经被修改。

以上就是Python实现疫苗接种管理数据库步骤详解的详细内容,更多关于Python疫苗接种管理数据库的资料请关注Devmax其它相关文章!

Python实现疫苗接种管理数据库步骤详解的更多相关文章

  1. 详解前端HTML5几种存储方式的总结

    本篇文章主要介绍了前端HTML5几种存储方式的总结 ,主要包括本地存储localstorage,本地存储sessionstorage,离线缓存(application cache),Web SQL,IndexedDB。有兴趣的可以了解一下。

  2. PhoneGap / iOS上的SQLite数据库 – 超过5mb可能

    我误解了什么吗?Phonegap中的sqlitedbs真的有5mb的限制吗?我正在使用Phonegap1.2和iOS5.解决方法您可以使用带有phonegap插件的原生sqliteDB,您将没有任何限制.在iOS5.1中,Websql被认为是可以随时删除的临时数据…

  3. ios – 领域:如何获取数据库的当前大小

    是否有RealmAPI方法使用RealmSwift作为数据存储来获取我的RealmSwift应用程序的当前数据库大小?

  4. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

  5. ios – Realm – 无法使用现有主键值创建对象

    我有一个对象有许多狗的人.应用程序有单独的页面,它只显示狗和其他页面显示人的狗我的模型如下我有人存储在Realm中.人有详细页面,我们取,并显示他的狗.如果狗已经存在,我会更新该狗的最新信息并将其添加到人的狗列表中,否则创建新狗,保存并将其添加到人员列表中.这适用于coredata.在尝试用他的狗更新人时,领域会抛出异常无法使用现有主键值创建对象解决方法这里的问题是,即使你正在创建一个全新的Rea

  6. ios – UIWebView中的WebSQL / SQLite数据库的最大大小(phonegap)

    我知道一般来说,Web应用程序的本地存储空间有5MB的限制.本地网页浏览应用程式是否也有这个限制?

  7. ios – Firebase离线存储高级 – 手动同步和进度信息

    >我可以提供一个捆绑数据库–安装App后我可以已经离线查询了Firebase数据?然后我有另一个关于Firebase的主要问题:>JSON存储是伟大的–但是这样我们不关心一个独特的结构,我们必须注意这一点插入总是正确的数据集?我从来没有试图显示实际的进展,但是当您从firebase中检索数据时,始终会在成功检索数据时调用onDataChange方法.https://firebase.google.com/docs/database/android/retrieve-data#read_data_onceC

  8. ios – 如何处理多用户数据库

    我的应用程序就像很多应用程序–它有一个用户输入用户名和密码的登录屏幕,以及登录按钮我的应用程序还使用CoreData来保存大多数用户的业务对象,当然也是用户特定的.我也有一个登出按钮来启用切换用户.这不会发生很多,但仍然是必要的).现在如果不同的用户登录,我需要获取他的具体数据.但是我该如何做呢?

  9. ios – Swift从Firebase数据库中获取特定价值

    我正在尝试从Firebase数据库中获取特定值.我看了一些像谷歌这样的文件,但我做不到.这是数据库的JSON文件:SWIFT代码:我想获得用户的电子邮件价值,而不是每个人.我怎样才能做到这一点?解决方法在您的代码中,快照将包含子值的字典.要访问它们,请将snapshot.value转换为Dictionary,然后访问各个子项是一个快照

  10. ios – Realm Swift:在卸载应用程序后是否可以保留数据库?

    使用realmswift,即使从设备上卸载应用程序,是否可以在设备内存中保留和维护应用程序的领域数据库文件?非常感谢您的帮助.解决方法删除应用程序时,应用程序的所有文件都是剩余的.iOS应用程序是沙盒.这意味着每个应用程序在磁盘中都有自己的空间,并有自己的目录,这些目录充当应用程序及其数据的主页.从iPhone删除应用程序会删除此沙箱,删除与该应用程序关联的所有数据.

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部