Python實(shí)現(xiàn)疫苗接種管理數(shù)據(jù)庫步驟詳解
引言
那一年過年前,疫情開始爆發(fā),對全國人民的生活和工作造成了嚴(yán)重的影響。但憑借著國家強(qiáng)盛的實(shí)力,新冠疫苗也很快的被技術(shù)人員研發(fā)出來,人們通過接種新冠疫苗來抵御新冠病毒的危害。本次通過接種新冠疫苗的這個(gè)數(shù)據(jù)統(tǒng)計(jì),來設(shè)計(jì)“疫苗接種數(shù)據(jù)庫”,存儲人們接種疫苗的相關(guān)信息,并實(shí)現(xiàn)“增刪改查”等基本操作以及其他的拓展功能。
國內(nèi)新冠疫苗人員接種后,如果不通過數(shù)據(jù)統(tǒng)計(jì)到數(shù)據(jù)庫,數(shù)據(jù)量之大,數(shù)據(jù)查詢,數(shù)據(jù)核實(shí),數(shù)據(jù)更改等工作會非常不方便,通過編程語言,設(shè)計(jì)疫苗接種數(shù)據(jù)庫,來存儲接種疫苗相關(guān)數(shù)據(jù),能使得工作人員和接種人員的工作量大大減少,從而減少工作負(fù)擔(dān),節(jié)省時(shí)間,減少更多的財(cái)力損失,實(shí)現(xiàn)更好的數(shù)據(jù)管理,是一種非常高效、精確、快捷、方便的方式。
一、數(shù)據(jù)庫信息
本次數(shù)據(jù)庫設(shè)計(jì)一共四張表,分別為《接種人員(person)》、《生產(chǎn)廠家(manufacturer)》、《疫苗信息(vaccine)》、《接種信息(inject_info)》。
- 《接種人員》表的數(shù)據(jù)項(xiàng):姓名,身份證號,生日,性別,家庭住址,聯(lián)系電話,不良反應(yīng)。
- 《生產(chǎn)廠家》表的數(shù)據(jù)項(xiàng):廠家名稱,廠家編號,廠家地址,聯(lián)系人,聯(lián)系人電話。
- 《疫苗信息》表的數(shù)據(jù)項(xiàng):疫苗名稱,疫苗編號,疫苗品種,疫苗廠家編號,生產(chǎn)日期,過期時(shí)間。
- 《接種信息》表的數(shù)據(jù)項(xiàng):接種編號,接種疫苗編號,疫苗品種,接種劑次,接種人姓名,接種人身份證號,接種時(shí)間,接種單位。
主要階段
- 確定選題:《課程設(shè)計(jì)-疫苗接種數(shù)據(jù)庫》。
- 需求分析:《數(shù)據(jù)庫數(shù)據(jù)字典》,編程語言為:python + mysql
二、關(guān)鍵代碼展示
1、app.py(主函數(shù))
if __name__ == '__main__': # 全局變量初始化 gol._init() # # 課題背景信息 # menu.course_background() # # # 打印小組成員信息 # menu.team_info() # 連接數(shù)據(jù)庫信息 db.connect_to_db(config.db_host, config.db_user, config.db_password, config.db_name) # 跳出數(shù)據(jù)庫的標(biāo)志 flag = True while (flag): menu.main_menu() cin = input("請輸入要執(zhí)行操作:") choice = int(cin) if cin.isdigit() else config.DEFAULT_INPUT if choice == 0: print("您已選擇退出,感謝您的操作體驗(yàn)") 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("操作選項(xiàng)輸入錯(cuò)誤,請重新輸入") 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 # 根據(jù)身份證號更新 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("請輸入修改后的接種人聯(lián)系電話:") 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 # 獲取數(shù)據(jù)表列 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("當(dāng)前列信息", 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) # 判斷唯一關(guān)鍵字是否重復(fù) 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 # 如果重復(fù)則重新輸入 a = input("您輸入與表中信息重復(fù),請重新輸入【%s】" % col_name) field_list.append(col_name) data_list.append(a) # 輸入完成,組裝數(shù)據(jù) field_str = ",".join(field_list) data_tuple = tuple(data_list) # 拼接數(shù)據(jù) sql = ''' INSERT INTO %s(%s) VALUES %s; ''' % (table, field_str, data_tuple) util.print_log(sql) cursor = gol.get_value('cursor') cursor.execute(sql) # 提交數(shù)據(jù) conn = gol.get_value('conn') conn.commit() util.print_log("%s 表成功插入數(shù)據(jù) %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("請輸入具體信息:") # 獲取相關(guān)表 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(): # 執(zhí)行查詢 menu.select_menu_total() # 獲取輸入 cin = util.get_user_input(5) if cin == 0: return if cin == config.TYPE_1: # ------------------查找接種人員相關(guān)信息---------------- 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: # ------------------查找生產(chǎn)企業(yè)相關(guān)信息----------------------- do_select_manufacturer() def do_select_vaccine(): # 查找疫苗信息 menu.select_menu_3() cin = util.get_user_input(5) if cin == 0: return # 獲取搜索數(shù)據(jù) cin2 = input("請輸入搜索數(shù)據(jù):") table = config.table_dict[config.TYPE_3] query_value = cin2 # 結(jié)果集合 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) # 生產(chǎn)日期 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() # 過期時(shí)間 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)
三、數(shù)據(jù)庫數(shù)據(jù)字典
1、接種人員(person)
字段名 | 字段標(biāo)題 | 字段類型 | 默認(rèn) | 字段備注 |
---|---|---|---|---|
id | ID | int | 無 | ID |
name | 姓名 | varchar(32) | 無 | 姓名 |
cert_no | 身份證號 | varchar(32) | 無 | 身份證號 |
birthday | 生日 | datetime | 無 | 生日 |
gender | 性別 | vtinyint(1) | 無 | 性別 |
address | 家庭住址 | varchar(128) | 無 | 家庭住址 |
phone | 電話 | varchar(16) | 無 | 電話 |
adverse_effect | 不良反應(yīng) | varchar(64) | 無 | 不良反應(yīng) |
2、生產(chǎn)廠家(manufacturer)
字段名 | 字段標(biāo)題 | 字段類型 | 默認(rèn) | 字段備注 |
---|---|---|---|---|
id | ID | int | 無 | ID |
name | 廠家名稱 | varchar(255) | 無 | 廠家名稱 |
company_no | 廠家編號 | varchar(32) | 無 | 廠家編號 |
address | 廠家地址 | varchar(255) | 無 | 廠家地址 |
contact_person | 聯(lián)系人 | varchar(255) | 無 | 聯(lián)系人 |
contact_phone | 聯(lián)系人電話 | int | 無 | 聯(lián)系人電話 |
3、疫苗信息(vaccine)
字段名 | 字段標(biāo)題 | 字段類型 | 默認(rèn) | 字段備注 |
---|---|---|---|---|
id | ID | int | 無 | ID |
name | 疫苗名稱 | varchar(64) | 無 | ID |
vaccine_no | 疫苗編號 | varchar(64) | 無 | 疫苗名稱 |
vaccine_type | 疫苗品種 | datetime(32) | 無 | 疫苗品種 |
company_no | 疫苗廠家編號 | vtinyint(32) | 無 | 疫苗廠家編號 |
production_at | 生產(chǎn)日期 | datetime | 無 | 生產(chǎn)日期 |
expired_at | 過期時(shí)間 | datetime | 無 | 過期時(shí)間 |
4、接種信息(inject_info)
字段名 | 字段標(biāo)題 | 字段類型 | 默認(rèn) | 字段備注 |
---|---|---|---|---|
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 | 接種時(shí)間 | datetime | 無 | 接種時(shí)間 |
inject_company | 接種單位 | varchar(128) | 無 | 接種單位 |
四、運(yùn)行效果
1、設(shè)計(jì)背景
2、小組信息
3、主界面
4、新增操作
結(jié)果:可見新加的“張三”信息已成功插入。
5、刪除操作
結(jié)果:可見新加的“張三”信息已成功刪除。
6、查詢操作
7、修改操作
結(jié)果:鄧陽華的家庭住址已經(jīng)被修改。
以上就是Python實(shí)現(xiàn)疫苗接種管理數(shù)據(jù)庫步驟詳解的詳細(xì)內(nèi)容,更多關(guān)于Python疫苗接種管理數(shù)據(jù)庫的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
tensorflow 實(shí)現(xiàn)從checkpoint中獲取graph信息
今天小編就為大家分享一篇tensorflow 實(shí)現(xiàn)從checkpoint中獲取graph信息,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02Python對字符串實(shí)現(xiàn)去重操作的方法示例
字符串去重是python中字符串操作常見的一個(gè)需求,最近在工作中就又遇到了,所以下面這篇文章主要給大家介紹了關(guān)于Python對字符串實(shí)現(xiàn)去重操作的相關(guān)資料,文中給出了詳細(xì)的介紹,需要的朋友可以參考借鑒,下面來一起看看吧。2017-08-08windows下添加Python環(huán)境變量的方法匯總
默認(rèn)情況下,在windows下安裝python之后,系統(tǒng)并不會自動(dòng)添加相應(yīng)的環(huán)境變量。此時(shí)不能在命令行直接使用python命令。今天我們就來看下,如何簡單快捷的在windows下添加Python環(huán)境變量2018-05-05python代碼打印100-999之間的回文數(shù)示例
今天小編就為大家分享一篇python代碼打印100-999之間的回文數(shù)示例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11淺談哪個(gè)Python庫才最適合做數(shù)據(jù)可視化
數(shù)據(jù)可視化是任何探索性數(shù)據(jù)分析或報(bào)告的關(guān)鍵步驟,目前有許多非常好的商業(yè)智能工具,比如Tableau、googledatastudio和PowerBI等,本文就詳細(xì)的進(jìn)行對比,感興趣的可以了解一下2021-06-06python練習(xí)之循環(huán)控制語句 break 與 continue
這篇文章主要介紹了python循環(huán)控制語句 break 與 continue,break就像是終止按鍵,不管執(zhí)行到哪一步,只要遇到break,不管什么后續(xù)步驟,直接跳出當(dāng)前循環(huán)2022-06-06