gpt4 book ai didi

python - 内存 SQL 查询

转载 作者:太空狗 更新时间:2023-10-29 21:52:46 24 4
gpt4 key购买 nike

假设我有一个运行 SQL 查询并返回数据帧的函数:

import pandas.io.sql as psql
import sqlalchemy

query_string = "select a from table;"

def run_my_query(my_query):
# username, host, port and database are hard-coded here
engine = sqlalchemy.create_engine('postgresql://{username}@{host}:{port}/{database}'.format(username=username, host=host, port=port, database=database))

df = psql.read_sql(my_query, engine)
return df

# Run the query (this is what I want to memoize)
df = run_my_query(my_query)

我愿意:

  1. 能够使用 query_string 的每个值一个缓存条目(即每个查询)记住我上面的查询
  2. 能够按需强制缓存重置(例如基于某些标志),例如这样我就可以在我认为数据库发生变化时更新我的​​缓存。

我如何使用 joblib 执行此操作? , jug

最佳答案

是的,你可以用 joblib 做到这一点(这个例子基本都是自己粘贴):

>>> from tempfile import mkdtemp
>>> cachedir = mkdtemp()

>>> from joblib import Memory
>>> memory = Memory(cachedir=cachedir, verbose=0)

>>> @memory.cache
... def run_my_query(my_query)
... ...
... return df

您可以使用 memory.clear() 清除缓存。


请注意,您还可以使用 lru_cache 或什至“手动”使用简单的字典:

def run_my_query(my_query, cache={})
if my_query in cache:
return cache[my_query]
...
cache[my_query] = df
return df

可以使用run_my_query.func_defaults[0].clear() 清除缓存(虽然不确定我是否会推荐这个,只是认为这是一个有趣的例子).

关于python - 内存 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25413946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com