TinyDB - 查询


TinyDB 拥有丰富的查询集。我们有多种方法来构造查询:第一种方法类似于 ORM 工具的语法,第二种方法是使用“Where”子句的传统方法。

在本章中,我们将了解在 TinyDB 数据库中构造查询的两种方法。

第一种方法:导入查询

第一种方法类似于 ORM 工具的语法,首先我们需要在命令提示符中导入查询。导入后,我们就可以使用查询对象来操作TinyDB数据库了。语法如下-

from tinydb import Query
student = Query()

这里,“student”是我们数据库的名称。对于示例,我们将使用以下学生数据库。

[
   {
      "roll_number":1,
      "st_name":"elen",
      "mark":250,
      "subject":"TinyDB",
      "address":"delhi"
   },
   {
      "roll_number":2,
      "st_name":"Ram",
      "mark":[
         250,
         280
      ],
      "subject":[
         "TinyDB",
         "MySQL"
      ],
      "address":"delhi"
   },
   {
      "roll_number":3,
      "st_name":"kevin",
      "mark":[
         180,
         200
      ],
      "subject":[
         "oracle",
         "sql"
      ],
      "address":"keral"
   },
   {
      "roll_number":4,
      "st_name":"lakan",
      "mark":200,
      "subject":"MySQL",
      "address":"mumbai"
   },
   {
      "roll_number":5,
      "st_name":"karan",
      "mark":275,
      "subject":"TinyDB",
      "address":"benglore"
   }
]

例子

以下是从学生数据库中检索数据的查询,其中学生的roll_no小于 3 -

>>> db.search(Query().roll_number < 3)

或者,

>>> student = Query()
>>> db.search(student.roll_number < 3)

上述搜索查询将产生以下结果 -

[
   {
      "roll_number":1,
      "st_name":"elen",
      "mark":250,
      "subject":"TinyDB",
      "address":"delhi"
   },
   {
      "roll_number":2,
      "st_name":"Ram",
      "mark":[
         250,
         280
      ],
      "subject":[
         "TinyDB",
         "MySQL"
      ],
      "address":"delhi"
   }
]

有时文件名不是有效的 Python 标识符。在这种情况下,我们将无法访问该字段。对于这种情况,我们需要切换到字典访问表示法,如下所示 -

student = Query();

# Invalid Python syntax
db.search(student.security-code == 'ABCD')

# Use the following dict access notation
db.search(student['security-code'] == 'ABCD')

第二种方法:使用“where”子句

第二种方法是使用“where”子句构建查询的传统方法。语法如下-

from tinydb import where
db.search(where('field') == 'value')

例子

TinyDB主题字段的“ where ”子句-

db.search(where('subject') == 'MySQL') 

上述查询将产生以下输出-

[{
      "roll_number":4,
      "st_name":"lakan",
      "mark":200,
      "subject":"MySQL",
      "address":"mumbai"
}]