擷取資料項目的作業會傳回一個游標,可用於從結果集中取用這些資料項目。可使用 Collection.find()
、Table.select()
和 Session.sql()
從資料庫讀取資料項目。Collection.find()
會傳回一個包含文件的資料集,而 Table.select()
和 Session.sql()
則分別傳回一個包含資料列的資料集。
所有結果集都實作了一種統一的方式來迭代其資料項目。統一的語法支援使用 fetchOne()
逐一擷取項目,或使用 fetchAll()
擷取所有項目的清單。fetchOne()
和 fetchAll()
遵循僅向前迭代語意。實作 X DevAPI 的連接器可以在頂端提供更進階的迭代模式,以符合常見的本機語言模式。
以下範例示範如何透過使用 fetchOne()
迴圈瀏覽所有文件,來存取 Collection.find()
作業傳回的文件。
第一次呼叫 fetchOne()
會傳回找到的第一個文件。所有後續呼叫都會將內部資料項目迭代器游標遞增一個位置,並傳回找到的項目,使第二次呼叫 fetchOne()
會傳回找到的第二個文件 (如果有的話)。當讀取最後一個資料項目並再次呼叫 fetchOne()
時,會傳回 NULL
值。這可確保顯示的基本 while 迴圈能與支援此類實作的所有語言搭配運作。
使用 fetchOne()
時,無法將內部資料項目游標重設為第一個資料項目,以重新開始讀取資料項目。連接器可能會捨棄已使用 fetchOne()
擷取過一次的資料項目 (此處為文件)。資料項目的生命週期與資料集分離。從連接器的角度來看,項目會在擷取時由呼叫者取用。此範例假設測試綱要存在。
myColl = db.get_collection('my_collection')
res = myColl.find('name like :name').bind('name','L%').execute()
doc = res.fetch_one()
while doc:
print(doc)
doc = res.fetch_one()
以下範例示範如何直接存取 Table.select()
作業傳回的資料列。結果迭代的基本程式碼模式相同。以下範例與前一個範例的差異在於資料項目處理。在此,fetchOne()
會傳回資料列。存取資料列之資料行值的確切語法會因語言而異。實作旨在提供語言原生存取模式。此範例假設 test
綱要存在,且員工表格存在於 myTable
中。
myRows = myTable.select(['name', 'age']).where('name like :name').bind('name','L%').execute()
row = myRows.fetch_one()
while row:
# Accessing the fields by array
print('Name: %s\n' % row[0])
# Accessing the fields by dynamic attribute
print('Age: %s\n' % row.age)
row = myRows.fetch_one()