代码块A
item = Query()
query = db.search(
(item['username'] == username)
and (item['password'] == md5(password))
)
代码块B
query = db.search(Query().fragment(
{
'username': username,
"password": md5(password)
}
))
一开始我以为两者是等价的,结果生产环境中出现了逻辑bug。
用print查找出了问题。
>>>print((item['username'] == username)
& (item['password'] == md5(password)))
QueryImpl('and', frozenset({('==', ('password',), 'testPassword'), ('==', ('username',), 'testUsername')}))
>>>print((item['username'] == username)
and (item['password'] == md5(password)))
QueryImpl('==', ('password',), 'testPassword')
可见,如果用and连接两个查询条件,会产生以下效果。。
>>>a = 1 and 2
>>>a
2
tinydb文档给出的连接方法是使用&符号,这有些反直觉了。。
Comments | NOTHING