3.8. Row¶
Rowはレコードのクラスです。 Rows がレコードセットですから、Rowはレコード行になります。
Rowクラス — レコードに関するクラス | |
---|---|
辞書型に変換 | |
Rowと共にDB上のレコードも更新 | |
Rowと共にDB上のレコードも削除 |
3.8.1. インスタンス化¶
Rowsクラスはイテレータを装備しており、Rowsインスタンスから要素を抜き出すとRowインスタンスとなります [1] 。
この他、Tableクラスの 特殊メソッドによるショートカット機能 から直接、Rowインスタンスを生成することも可能です。しかしこの方法は、 内部でRowsインスタンスを生成して要素を切り出しています。つまり単なるショットカット機能です。
【 Rowインスタンスの生成 】
- 生成・・・・・・Rowsクラスから要素を抜き出します。
>>> rows = db(db.person).select() >>> row = rows[0] # personテーブルの先頭レコード >>> row = db.person[1] # personテーブルの先頭レコード >>> row = db.person(1) # personテーブルの先頭レコード
3.8.2. メソッド¶
メソッド説明用サンプルでは次のテーブルを利用します。
db.define_table('person', Field('name'), Field('birthday', 'datetime')
-
Row.
as_dict
([datetime_to_str]) → 辞書型¶ Rowインスタンスを辞書型データに変換します。同様のメソッドとして、Rowsクラスの
as_dict()
メソッド があります。>>> print db.person(1).as_dict() {'name': 'Totoceco', 'id': 1, 'birthday': datetime.date(2008, 12, 23)}
- datetime_to_str
日付時間フィールドの文字列変換の制御を行います。デフォルトはFalseです。
>>> print db.person(1).as_dict(datetime_to_str=True) {'name': 'Totoceco', 'id': 1, 'birthday': '2008-12-23 00:00:00'}
3.8.3. 組み込み関数¶
Rowインスタンスには、特殊な無名関数(lambda)が含まれています。Rowインスタンスの生成時、正確にはSetクラスの select()
メソッドが動作する時にRowインスタンスに埋め込まれます。
この関数はメソッドではありません。しかし辞書型データの特徴をうまく利用して、メソッドのように動作します。
-
Row.
update_record
()¶ Rowインスタンスのデータと共に、データベース上のデータも更新します。
>>> row = db.person(1) >>> row.update_record(name='Socepopa')
Rowインスタンスのデータをステップ・バイ・ステップで修正し、データベースに一度で反映させることも可能です。
>>> row = db.person(1) >>> row.name = 'Socepopa' >>> row.birthday = datetime.datetime(2008, 12, 23, 0, 0) >>> row.update_record()
この場合、update_record のパラメータは指定しません。
Rowクラスにはupdateメソッドがありますが、これはPythonの辞書型でもともと用意しているメソッドです。
>>> row.update(name='Socepopa')
当然ですが、このメソッドはRowインスタンスのデータは変更しても、データベース上のデータは変更できません。
Note
update_record が動作するのは、
select()
にidフィールドが含まれており、cacheableオプションが True でない場合です。
-
Row.
delete_record
() → 削除レコード数¶ Rowインスタンスの、主キー値と一致するデータベースのレコードを削除します。戻り値は削除レコード数です。
>>> row.delete_record() 1
delete_record はRowもしくはRowsインスタンスの該当レコードデータは削除しません。このため必要に応じて、データベースから 読み直すなどの処理が必要です。
[1] | Pythonのinstance型オブジェクトではありませんが、簡単に説明するために インスタンス という言葉を使用しています。 |