完全自已查资料写的,年龄大了,记性差了,都放在网上吧!喜欢的随手点个赞,谢谢!

import streamlit as st

import sqlite3

from sqlite3 import Connection

from contextlib import closing

URI_SQLITE_DB = "dbrag.db"


 

def main():

    st.title("混沌知识库")

    conn = get_connection(URI_SQLITE_DB)

    init_db_workarea(conn)

    init_db_worklist(conn)

    build_sidebar(conn)

#查询数据库中的表名

def get_tables():

    with get_connection() as conn:

        return [table for table in conn.execute(

            "SELECT name FROM sqlite_master WHERE type='table'"

        ).fetchall()]

#执行sql操作

def insert_workarea(conn: Connection,workareaname):

    conn.execute('''

        INSERT INTO workarea (area_name) VALUES (?)

        ''',(workareaname,))

    conn.commit()

# 创建工作区表

def init_db_workarea(conn: Connection):

    conn.execute(

        """CREATE TABLE IF NOT EXISTS workarea

            (

                area_id INTEGER PRIMARY KEY,

                area_name TEXT NOT NULL

            );"""

    )

    conn.commit()


 

# 创建工作区分类表(带外键关联)

def init_db_worklist(conn: Connection):

    conn.execute(

        """CREATE TABLE IF NOT EXISTS worklist

            (

                list_id INTEGER PRIMARY KEY,

                area_id INTEGER,

                list_name TEXT,

                FOREIGN KEY(area_id) REFERENCES workarea(area_id)

            );"""

    )

    conn.commit()

# 创建数据库连接

@st.cache_resource(hash_funcs={Connection: id})

def get_connection(path: str):

    return sqlite3.connect(path, check_same_thread=False)





 

def build_sidebar(conn):

    st.sidebar.subheader("系统功能导航", divider="rainbow")

    #新建工作区的button

    if 'button_new' not in st.session_state:

        st.session_state.button_new = False

    def click_button_new():

        st.session_state.button_new = not st.session_state.button_new

    st.sidebar.button('新建工作区', on_click=click_button_new,key="button_new_workarea",use_container_width=True)

    def click_button_close():

        st.session_state.button_new =False

    # 初始化输入内容的session_state

    if 'input_value' not in st.session_state:

        st.session_state.input_value = ''

    @st.dialog("提示")

    def message_dialog(msgstring):

        st.write(f"{msgstring}!")

        if st.button("关闭"):

                st.rerun()

    def click_button_save():

        if not input_val.strip():

            message_dialog("没有输入工作区名称!")

            st.session_state.button_new=True

        else:

            insert_workarea(conn,input_val)

            st.session_state.input_value=input_val

            message_dialog(input_val+" 保存成功!")

            st.session_state.button_new=False

    if st.session_state.button_new:

        # 文本输入组件

        input_val=st.sidebar.text_input(label='请输入工作区的名称:',key='workareaname',placeholder='请输入工作区的名称')

        left,right = st.sidebar.columns(2, vertical_alignment="center")

        left.button("保存", on_click=click_button_save,key="button_save", use_container_width=True)

        right.button("关闭", on_click=click_button_close,key="button_close",use_container_width=True)

if __name__ == "__main__":

    main()

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐