TinyDB - 查询



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

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

第一种方法:导入查询

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

from tinydb import Query
student = Query()

这里,“student”是我们的数据库名称。在示例中,我们将使用以下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"
   }
]

示例

以下是从student数据库中检索数据的查询,其中学生的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 子句用于subject字段:

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

上述查询将产生以下输出

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