我在使用Flask-Cache时遇到了问题.我需要在需要的基础上进行缓存,方法是定义一个配置变量,用户可以设置该变量来启用或禁用缓存.
我正在使用Flask-Cache进行缓存
cache = Cache(config = {'CACHE_TYPE':'redis'})
app = Flask(名字)
初始化缓存
cache.init_app(APP)
清除缓存
使用app.app_context():
Run Code Online (Sandbox Code Playgroud)cache.clear()
并使用缓存(在views.py中)作为
@ app.route('/',methods = ['GET'])
@validate_access(current_user,"read")
@要求登录
@ cache.memoize()
def get_values(id):
Run Code Online (Sandbox Code Playgroud)return get_values()
在使用Flask-Cache时,我没有获得正确的启用/禁用缓存的方法.是否有一种标准方式可以完全启用/禁用缓存行为.
我的表 Report 有 10 多列,其中除自动增量 id 之外的每个字段都是 varchar。表中任何行的最大大小约为 80000 字节。
我观察到以下 2 个查询之间存在相当大的差异,其中服务器和客户端都位于同一系统上(大约 150 万行)(列名上也有索引)
select * from Report;
Run Code Online (Sandbox Code Playgroud)
&
select name from Report;
Run Code Online (Sandbox Code Playgroud)
我经历了其他 stackoverflow 问题,Ans 建议
“选择特定列更好的原因之一是它提高了 SQL Server 可以从索引访问数据而不是查询表数据的可能性。”
我的问题是:
1)即使在使用索引时,我们也需要从实际的数据库(即磁盘)中读取数据,因此当我们选择单列或多列(假设使用*)时,将执行相同的磁盘I/o。
2)有人可以用很少的内部知识解释为什么单列选择和多列选择之间存在差异。据我了解,数据库尝试将完整的行存储在同一磁盘扇区中。
假设对用户表进行一些查询,例如
select first_name from user &
select first_name, age from user
Run Code Online (Sandbox Code Playgroud)
3)数据库是否执行相同的磁盘I/O(对于上述查询),或者磁盘I/O可能不同,如果用户表有超过10列并且我们选择5~8列,但磁盘I/O保持不变怎么办?
已经在其他答案中读到,使用 select * 并不可取,它可能会导致视图和维护问题(向数据库添加新列时的情况)
这可能是一个愚蠢的问题,因为仍在学习数据库(学科新手)。如果某些问题已在任何地方得到解答,请提供链接。
在处理某些问题时生成不同的字符串组合,请遵循以下行为
In [3]: str = 'abcd'
In [4]: str
Out[4]: 'abcd'
In [5]: str = 'ab'cd'
------------------------------------------------------------
File "<ipython console>", line 1
str = 'ab'cd'
^
SyntaxError: invalid syntax
In [6]: str = 'ab''cd'
In [7]: str
Out[7]: 'abcd'
Run Code Online (Sandbox Code Playgroud)
我知道单引号字符串可以在两者之间保存双引号的情况,双引号字符串可以在两者之间保存单引号.
有人可以解释一下,为什么我们观察这种行为,里面单引号字符串允许两个同时单引号,但单引号不行.
python ×2
caching ×1
database ×1
flask ×1
flask-cache ×1
mysql ×1
postgresql ×1
python-2.7 ×1
python-3.x ×1
sql ×1
sql-server ×1
string ×1