实现后台更新数据
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
#!/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
|
||||||
@@ -29,11 +28,3 @@ 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
48
main.py
@@ -4,28 +4,29 @@ import streamlit as st
|
|||||||
from loguru import logger
|
from loguru import logger
|
||||||
|
|
||||||
from bak.init_data import BatchDataRead
|
from bak.init_data import BatchDataRead
|
||||||
from db_utils import BatchData, get_session
|
from db_utils import BatchData, session
|
||||||
|
|
||||||
st.session_state.setdefault('data_table', [])
|
|
||||||
|
|
||||||
|
|
||||||
# session: Session = next(get_session())
|
|
||||||
|
|
||||||
def get_data_from_db():
|
def get_data_from_db():
|
||||||
logger.info("init")
|
logger.debug("init")
|
||||||
return (BatchDataRead.from_orm(db_obj).dict()
|
db_objs = session.query(BatchData).all()
|
||||||
for db_obj in next(get_session()).query(BatchData).all())
|
res = (BatchDataRead.from_orm(db_obj).dict() for db_obj in db_objs)
|
||||||
|
return list(res)
|
||||||
|
|
||||||
|
|
||||||
# logger.debug(st.session_state.data_table)
|
st.session_state.setdefault('data_table', get_data_from_db())
|
||||||
# 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)
|
df = pd.DataFrame(data=st.session_state.data_table)
|
||||||
|
|
||||||
|
|
||||||
def update_handler(*args, **kwargs):
|
def update_handler():
|
||||||
logger.debug(f"{args=}, {kwargs=}")
|
edited_rows = st.session_state['edited_info'].get('edited_rows')
|
||||||
|
for id_, update_data in edited_rows.items():
|
||||||
|
row_db = session.query(BatchData).where(BatchData.id == int(edited_df.loc[id_].id)).first()
|
||||||
|
logger.info(f"update: {update_data}")
|
||||||
|
for field in update_data:
|
||||||
|
setattr(row_db, field, update_data[field])
|
||||||
|
session.commit()
|
||||||
|
|
||||||
|
|
||||||
edited_df = st.data_editor(df, key="edited_info",
|
edited_df = st.data_editor(df, key="edited_info",
|
||||||
@@ -42,18 +43,11 @@ edited_df = st.data_editor(df, key="edited_info",
|
|||||||
'is_validation': "是否是验证集",
|
'is_validation': "是否是验证集",
|
||||||
})
|
})
|
||||||
|
|
||||||
favorite_command = edited_df.loc[edited_df["id"].idxmax()]
|
# favorite_command = edited_df.loc[edited_df["id"].idxmax()]
|
||||||
data_table_change_info = st.session_state['edited_info']
|
# data_table_change_info = st.session_state['edited_info']
|
||||||
logger.debug(f"{data_table_change_info=}")
|
# logger.debug(f"{data_table_change_info=}")
|
||||||
|
|
||||||
edited_rows = data_table_change_info.get('edited_rows')
|
# st.rerun()
|
||||||
session = next(get_session())
|
# st.session_state.data_table = get_data_from_db()
|
||||||
for id_, update_data in edited_rows.items():
|
|
||||||
row_db = session.query(BatchData).where(BatchData.id == int(edited_df.loc[id_].id)).first()
|
# st.rerun()
|
||||||
for field in update_data:
|
|
||||||
setattr(row_db, field, update_data[field])
|
|
||||||
st.text(f"update: {id_=}, {update_data=}")
|
|
||||||
st.toast('Your edited image was saved!', icon='😍')
|
|
||||||
session.commit()
|
|
||||||
st.rerun()
|
|
||||||
logger.info('end')
|
|
||||||
|
|||||||
Reference in New Issue
Block a user