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

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

界面是这样式儿滴:
纯Python搭建数据库查询网站实践
数据库检索结果呈现:
纯Python搭建数据库查询网站实践

代码是这样式儿滴:

#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仍在发展中,盼望功能早日更加强大。

上一篇:大数据开发-Scala 下划线的多种场景


下一篇:使用mousedown、mousemove、mouseup实现拖拽效果