Как кэшировать функцию, которая принимает соединение с базой данных в качестве входных данных, используяstreamlitPython

Программы на Python
Anonymous
Как кэшировать функцию, которая принимает соединение с базой данных в качестве входных данных, используяstreamlit

Сообщение Anonymous »


У меня есть подключение к базе данных:

импортировать sqlalchemy как sa двигатель = sa.create_engine('my_info') соединение = engine.connect() Впоследствии у меня есть функция:

импортировать панд как pd защита load_data (соединение): sql = 'выбрать * из имени таблицы' df = pd.read_sql(sql, con = соединение) возврат DF Это часть приложения в Streamlit, над которым я работаю. Мне нужно, чтобыstreamlit кэшировал выходные данные моей функции load_data. Я думал, это работает так:

импортировать панд как pd импортировать поток, освещенный как st @st.cache() защита load_data (соединение): sql = 'выбрать * из имени таблицы' df = pd.read_sql(sql, con = соединение) возврат DF Но это дает мне следующую ошибку:

UnhashableTypeError: невозможно хэшировать объект типа встроенный.weakref, найденный в аргументах load_data(). Ошибка намного длиннее, и если это поможет, я ее опубликую. Ошибка также содержит ссылку на документацию по стримлиту. Я прочитал его и переформулировал свой код так:

@st.cache() защита DBConnection(): двигатель = sa.create_engine("my_info") конн = двигатель.connect() возврат соединения конн = БДСоединение() @st.cache(hash_funcs={DBConnection: id}) защита load_data (соединение): sql = 'выбрать * из имени таблицы' df = pd.read_sql(sql, con = соединение) возврат DF Но это выдает NameError:

NameError: имя «DBConnection» не определено У меня закончились идеи, буду очень признателен за любую помощь. Вполне возможно, что я неправильно понял документацию, поскольку она предполагает наличие большого количества предварительных знаний о процессе хеширования и кэширования.

Вернуться в «Python»