Как кэшировать функцию, которая принимает соединение с базой данных в качестве входных данных, используяstreamlit ⇐ Python
Как кэшировать функцию, которая принимает соединение с базой данных в качестве входных данных, используяstreamlit
У меня есть подключение к базе данных:
импортировать 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» не определено У меня закончились идеи, буду очень признателен за любую помощь. Вполне возможно, что я неправильно понял документацию, поскольку она предполагает наличие большого количества предварительных знаний о процессе хеширования и кэширования.
У меня есть подключение к базе данных:
импортировать 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» не определено У меня закончились идеи, буду очень признателен за любую помощь. Вполне возможно, что я неправильно понял документацию, поскольку она предполагает наличие большого количества предварительных знаний о процессе хеширования и кэширования.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Почему моя определенная функция не принимает массив в качестве входных данных?
Anonymous » » в форуме Python - 0 Ответы
- 72 Просмотры
-
Последнее сообщение Anonymous
-