1.4. ショートカット¶
DAL構文を理解する上で一番混乱するのが、ショートカットの存在です。ショットカットは使いこなせば便利ですが、機能やクラスの違いが理解できなければ混乱するばかりになります。
この章ではいろいろなタイプのショットカットを紹介します。
1.4.1. レコード挿入¶
標準的な構文とショットカットで表記できる構文を示します。括弧内に構文のクラスを表記します。
1.4.2. レコード検索¶
標準的な構文とショットカットで表記できる構文を示します。括弧内に構文のクラスと、出力されるオブジェクトのクラスを表記します。
-
>>> rows = db(db.person.id > 0).select()
条件式を使った構文です。この構文は Set インスタンスになります。出力は Rows オブジェクトです。
条件式にTableインスタンスを指定 ( Set -> Rows )
>>> rows = db(db.person).select()
条件式がTableインスタンスだと、web2pyは次の条件式に変換します。
db.person.id > 0
条件式にFieldインスタンスを指定 ( Set -> Rows )
>>> rows = db(db.person.id).select()
条件式がFieldインスタンスだと、web2pyは次のような条件式に変換します。
db.person.id != None
条件式は設定せず、selectメソッド引数に指定 ( Set -> Rows )
>>> rows = db().select(db.person.name) # personテーブルのnameフィールドだけを選択 >>> rows = db().select(db.person.ALL) # personテーブルの全フィールドを選択
selectメソッドの引数には、FieldもしくはSQLALLインスタンスを指定します。選択するのは全レコードです。
Tableインスタンスでidをリスト形式で指定することでレコードを取得することも可能です。( Table -> Row )
>>> row = db.person[4] # idフィールドが4のレコードを取得
出力は Row インスタンスになります。
Tableインスタンスを関数のように呼び出すことでレコードを取得することも可能です。( Table -> Row )
>>> row = db.person(4) # idフィールドが4のレコードを取得 >>> row = db.person(db.person.id == 4) # 条件式(Queryクラス)でレコードを取得 >>> row = db.person(id=4) # パラメータでフィールドと値を指定してレコードを取得 >>> row = db.person(4, name='Pamasaso') # idとパラメータの2つの条件でレコードを取得
出力は Row インスタンスのため、複数のレコードがあっても最初の一件だけになります。またリスト形式の5の方法より、6の方が比較的安全に使用できます。
1.4.3. レコード更新¶
標準的な構文とショットカットで表記できる構文を示します。括弧内に構文のクラスを表記します。
標準的な構文 ( Table )
>>> db(db.person.id == 1).update(name='Cotasata')
リスト形式でのレコード更新( Table )
>>> db.person[1] = dict(name='Cotasata')
リスト形式でid番号を指定することにより、レコード更新が可能です。
Rowインスタンスからのレコード更新( Row )
>>> row = db.person(1) >>> row.update_record(name='Cotasata')
Rowクラスでは、インスタンスの中に組み込み関数を自動設定しています。このためこの関数を呼び出せば、データベース上のレコード更新も可能です。
1.4.4. レコード削除¶
標準的な構文とショットカットで表記できる構文を示します。括弧内に構文のクラスを表記します。