根据sqlalchemy文档提供的缓存sqlalchemy查询的示例,我们假设这样做
from caching_query import FromCache
# load Person objects. cache the result under the namespace "all_people".
print "loading people...."
people = Session.query(Person).options(FromCache("default", "all_people")).all()
我在development.ini中有beaker的以下配置
cache.regions = day, hour, minute, second
cache.type = file
cache.data_dir = %(here)s/cache/sess/data
cache.lock_dir = %(here)s/cache/sess/lock
cache.second.expire = 1
cache.minute.expire = 60
cache.hour.expire = 3600
cache.day.expire = 86400
当我在我的应用程序中使用上面的示例代码时,数据没有缓存在缓存文件夹中,所以我假设基于内存的缓存是默认的,是否可以将sqlalchemy缓存类型切换为基于文件?还是我弄错了?
答案 0 :(得分:1)
您的问题缺少一些细节,但让我试试:
传递给FromCache()
的第一个参数是Beaker缓存区域的名称,它应该与其中一个配置的区域匹配,这不是这里的情况。或者您可能在代码中配置default
区域(如果区域未知,我希望BeakerException
被抛出?)
您需要安装pyramid_beaker
模块并将其包含在Pyramid的项目配置中。我建议您关注pyramid_beaker
manual's Setup section。
您需要在应用的__init__.py
中添加一些额外的代码才能将.ini
文件设置传播到Beaker。本手册的Beaker cache region support部分对此进行了描述。
这是我当前项目的一个工作示例,配置基于Beaker的会话和缓存(删除所有不相关的部分):
from pyramid.config import Configurator
from pyramid_beaker import set_cache_regions_from_settings
from pyramid_beaker import session_factory_from_settings
def main(global_config, **settings):
# Configure Beaker caching/sessions
set_cache_regions_from_settings(settings)
session_factory = session_factory_from_settings(settings)
config = Configurator(settings=settings)
config.set_session_factory(session_factory)
config.include('pyramid_beaker')
config.add_static_view('static', 'static', cache_max_age=3600)
config.add_route('home', '/')
config.scan()
return config.make_wsgi_app()