1.1. DAL構文のテスト

DALは複雑な動きをするため、実際に構文を試すのが理解への近道です。

1.1.1. インタラクティブ・シェル

簡単にDAL構文を試す方法として、web2pyをインタラクティブ・シェルで立ち上げる方法があります。これは次のオプションをつけて、web2pyを起動します。

-S アプリケーション名
web2pyの環境が、インタラクティブ・シェルもしくはIPythonで起動します。しかしアプリケーションサーバー環境は起動しないため、ブラウザでのアクセスはできません。

この他に次のオプションもあります。

-M
アプリケーションのモデル定義をインポートします。モデルで記述した環境が、シェルで利用できます。
-P
インタラクティブ・シェルではなく、通常のシェルを起動します。

それでは実際に試してみましょう。コマンドプロンプトから、次のように起動します。

python web2py.py -S myapp -M

アプリケーション名は myappです。web2pyをIPythonシェルで起動します。

../../_images/web2py_dal_006r.JPG

通常のシェル環境での起動も試してみます。

python web2py.py -S myapp -M -P
../../_images/web2py_dal_007r.JPG

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コマンド発行時に、対象を括弧で囲む必要があります。

  • 接続文字列やデータベース名の取り出し

    接続文字列やデータベース名の取り出しも可能です。

    属性値として _uri_dbname などがあります。

    まずデータベースに接続します。

    >>> db = DAL('sqlite://storage.db')
    

    接続文字列を取り出します。

    >>> db._uri
    sqlite://storage.db
    

    データベース名を取り出します。

    >>> db._dbname
    sqlite
    
  • テーブルやフィールドの取り出し

    データベースに問い合わせて、テーブルやフィールド名一覧を取り出すことが可能です。

    メソッドの 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()