This commit is contained in:
leo
2024-03-06 21:46:07 +08:00
parent b292819107
commit 6fa40df0e8
3 changed files with 52 additions and 8 deletions

BIN
data.db

Binary file not shown.

View File

@@ -1,11 +1,13 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding:utf-8 -*- # -*- coding:utf-8 -*-
from typing import Generator
from sqlalchemy import Column, Integer, String, create_engine from sqlalchemy import Column, Integer, String, create_engine
from sqlalchemy.orm import declarative_base, sessionmaker from sqlalchemy.orm import declarative_base, sessionmaker
Base = declarative_base() Base = declarative_base()
# 创建 SQLite 数据库引擎 # 创建 SQLite 数据库引擎
engine = create_engine('sqlite:///data.db', echo=False) engine = create_engine('sqlite:///data.db', echo=True)
class BatchData(Base): class BatchData(Base):
@@ -27,3 +29,11 @@ Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine, ) Session = sessionmaker(bind=engine, )
session = Session() session = Session()
def get_session() -> Generator:
try:
db = Session()
yield db
finally:
db.close()

48
main.py
View File

@@ -1,16 +1,50 @@
# streamlit_app.py # streamlit_app.py
import pandas as pd import pandas as pd
import streamlit as st import streamlit as st
from loguru import logger
from bak.init_data import BatchDataRead from bak.init_data import BatchDataRead
from db_utils import BatchData, session from db_utils import BatchData, get_session
df = pd.DataFrame( st.session_state.setdefault('data_table', [])
data=(BatchDataRead.from_orm(db_obj).dict()
for db_obj in session.query(BatchData).all())
)
edited_df = st.data_editor(df) # 👈 An editable dataframe
def get_data_from_db():
logger.info("init")
return (BatchDataRead.from_orm(db_obj).dict()
for db_obj in next(get_session()).query(BatchData).all())
# logger.debug(st.session_state.data_table)
# if not st.session_state.data_table:
st.session_state.data_table = get_data_from_db()
df = pd.DataFrame(data=st.session_state.data_table)
def update_handler(*args, **kwargs):
logger.debug(f"{args=}, {kwargs=}")
edited_df = st.data_editor(df, key="edited_info",
hide_index=True,
on_change=update_handler,
column_order=('id', 'year', 'is_validation'),
use_container_width=True) # 👈 An editable dataframe
favorite_command = edited_df.loc[edited_df["id"].idxmax()] favorite_command = edited_df.loc[edited_df["id"].idxmax()]
st.markdown(f"Your favorite command is **{favorite_command}** 🎈") data_table_change_info = st.session_state['edited_info']
logger.debug(f"{data_table_change_info=}")
edited_rows = data_table_change_info.get('edited_rows')
session = next(get_session())
for id_, update_data in edited_rows.items():
row_db = session.query(BatchData).where(BatchData.id == id_).first()
for field in update_data:
setattr(row_db, field, update_data[field])
session.add(row_db)
session.commit()
# logger.info(f"{BatchDataRead.from_orm(row_db)}")
st.text(f"update: {id_=}, {update_data=}")
logger.info('end')