admin管理员组

文章数量:1794759

纯Python搭建数据库查询网站实践

纯Python搭建数据库查询网站实践

是的,纯Python! 不用html,不用css,不用java script…不用多如牛毛汗牛充栋各种牛逼闪亮的前端技术,用100%的纯python可以搭建一个数据库查询网站。 用Streamlit,以及numpy和sqlite,代码不到60行,其中还包含几行防注入攻击的代码。 因为Streamlit官网的文档太过于简略,网上相关中文资料又比较少,所以特此分享摸索出来的一点心得。 该案例已经过简化,在本地跑没问题,做过验证。待有时间把它部署到网上,届时再和大家分享部署的心得。

界面是这样式儿滴(如谷歌一般简单): 数据库检索结果呈现:

代码是这样式儿滴:

#coding:utf-8 import streamlit as st import numpy as np import sqlite3 class Query: def __init__(self,cas_number): self.__casno=cas_number def CasnumberQuery(self): result_list_0=[] row=0 cas_query_0='''SELECT ori_sn,casno,cnname,enname,remark,legid FROM CNOTHERS WHERE casno='CAS_X';''' cas_query_1=cas_query_0.replace('CAS_X',str(self.__casno)) result_0=chemicals.execute(cas_query_1) for chem in result_0:#解包到列表中 result_list_0.append(chem[5]) result_set_0=set(result_list_0)#转换列表为集合(可去重) if len(result_set_0)==0:#如果列表为空,意味着未检索到结果 return None else: leg_query='''SELECT leg_cn,leg_en,pub_date FROM CNLAWS WHERE legid='LEG_X';''' leg_arr=np.empty((len(result_set_0)+1,3),object)#为储存查询结果,预制了一个空数组 leg_arr[0,:]=(['法规中文名称','English Title','发布日期'])#标题列 for leg_id in result_set_0:#将数据库检索结果写入数组 leg_query_1=leg_query.replace('LEG_X',leg_id) leg_result_1=chemicals.execute(leg_query_1).fetchone() row+=1 leg_arr[row,:]=([leg_result_1[0],leg_result_1[1],leg_result_1[2]]) return leg_arr#返回数组 def findillegalchar(casnum): ''' 检验查询输入字符,防止注入攻击 ''' safetynum=['0','1','2','3','4','5','6','7','8','9','-'] for char in casnum: if char not in safetynum: return char st.title('化学品关联法规查询') warehouse=sqlite3.connect(r'C:\\chemicals\\chem2reg\\cisdatabase.db') chemicals=warehouse.cursor() whichcasno=st.text_input('Enter CAS number', value='', max_chars=None, key=None, type='default', help='CAS号形如1336-21-6') if whichcasno!='': if findillegalchar(whichcasno): st.write(whichcasno,'包含非法字符:',findillegalchar(whichcasno)) else: st.write(whichcasno,'的关联法规为:') query_test=Query(whichcasno) df_result_0=query_test.CasnumberQuery() if df_result_0 is not None: st.dataframe(data=df_result_0) else: st.write('oops!未检索到关联法规数据')

以上代码的注释相信应该是比较明了的,如果有问题请留言,必知无不言。

作为业外人士,说句搓火的话,我觉得大牛都是在后端,不屑于做前端。所以直到今天,前端技术乱七八糟的,也没个人一统江湖。话说回来,赚钱还是前端赚钱,不过也都是辛苦钱。

参考王树义老师的吐槽(也挺撕心裂肺的哈哈~),及其streamlit教程

Streamlit仍在发展中,盼望功能早日更加强大。

【20210514更新】 代码在网上跑起来了!地址: share.streamlit.io/qehshub/chem2reg/main/chem2reg_app.py

截图:

本文标签: 数据库查询网站Python