Python实现疫苗接种管理数据库步骤详解

 

引言

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

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

 

一、数据库信息

本次数据库设计一共四张表,分别为《接种人员(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)

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

2、生产厂家(manufacturer)

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

3、疫苗信息(vaccine)

字段名字段标题字段类型默认字段备注
idIDintID
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)

字段名字段标题字段类型默认字段备注
idIDintID
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疫苗接种管理数据库的资料请关注编程宝库其它相关文章!

 在python列表中删除元素主要分为以下3种场景:根据目标元素所在的索引位置进行删除,可以使用del关键字或pop()方法;根据元素本身的值进行删除,可使用列表(list类型)提 ...