完全自已查资料写的,年龄大了,记性差了,都放在网上吧!喜欢的随手点个赞,谢谢!
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()