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"
}]
廣告