1.1. DAL構文のテスト¶
DALは複雑な動きをするため、実際に構文を試すのが理解への近道です。
1.1.1. インタラクティブ・シェル¶
簡単にDAL構文を試す方法として、web2pyをインタラクティブ・シェルで立ち上げる方法があります。これは次のオプションをつけて、web2pyを起動します。
- -S アプリケーション名
- web2pyの環境が、インタラクティブ・シェルもしくはIPythonで起動します。しかしアプリケーションサーバー環境は起動しないため、ブラウザでのアクセスはできません。
この他に次のオプションもあります。
- -M
- アプリケーションのモデル定義をインポートします。モデルで記述した環境が、シェルで利用できます。
- -P
- インタラクティブ・シェルではなく、通常のシェルを起動します。
それでは実際に試してみましょう。コマンドプロンプトから、次のように起動します。
python web2py.py -S myapp -Mアプリケーション名は myappです。web2pyをIPythonシェルで起動します。
通常のシェル環境での起動も試してみます。
python web2py.py -S myapp -M -P
1.1.2. シェルで利用できる便利なコマンド¶
- typeコマンド
DAL構文を試す時に便利なのが、typeコマンドです。変数の型を表示してくれます。
IPythonでのサンプル
In [1]: type db.person ------> type(db.person) Out[1]: <class 'gluon.dal.Table'>
通常シェルでのサンプル
>>> type(db.person.name) <class 'gluon.dal.Field'>
通常シェルではtypeコマンド発行時に、対象を括弧で囲む必要があります。
- テーブルやフィールドの取り出し
データベースに問い合わせて、テーブルやフィールド名一覧を取り出すことが可能です。
メソッドの
tables()
とfields()
を使用します。アプリケーションに含まれるテーブル一覧を取り出します。
>>> db.tables ['auth_user', 'auth_group', 'auth_membership', 'auth_permission', 'auth_event', 'auth_cas', 'numbers', 'person', 'dog', 'feed', 'cat', 'inventory', 'mouse']
テーブルのフィールドを取り出します。
>>> db.person.fields ['id', 'name']
テーブル一覧を利用して、次のようにアプリケーションに含まれるテーブルを削除することも可能です。
>>> while len(db.tables): ... for t in db.tables: ... exec 'db.%s.drop()' % t ... >>> db.tables []
whileとfor文で二重に回している理由は、何らかの依存関係で上手く削除できないテーブルがあるからです。
1.1.3. シェルでのトランザクション制御¶
web2pyのトランザクション制御は通常、適切なコードが挿入され自動で実行されます。しかしシェル上では、自動でコード挿入は行われません。このため必要に応じて、コミットとロールバック命令を発行する必要があります。
命令発行は次のように行います。
コミット
>>> db.commit()ロールバック
>>> db.rollback()