1.2. DALの基本的な構文

DALの基本構文について、細かい機能は省いて簡単に解説します。

1.2.1. データベースへの接続

データベースへの接続は次のような構文になります。

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

‘sqlite://storage.db’ は接続文字列です。使用するデータベースによって、文字列が変わることになります。

DB管理システム 接続文字列例
SQLite sqlite://storage.db
MySQL mysql://username:password@localhost/test
PostgreSQL postgres://username:password@localhost/test
MSSQL mssql://username:password@localhost/test
FireBird firebird://username:password@localhost/test
Oracle oracle://username/password@test
DB2 db2://username:password@test
Ingres ingres://username:password@localhost/test
Sybase sybase://username:password@localhost/test
Informix informix://username:password@test
Teradata teradata://DSN=dsn;UID=user;PWD=pass;DATABASE=test
Cubrid cubrid://username:password@localhost/test
SAPDB sapdb://username:password@localhost/test
IMAP imap://user:password@server:port
MongoDB mongodb://username:password@localhost/test
Google/SQL google:sql://project:instance/database
Google/NoSQL google:datastore

Connection Strings接続文字列 より

詳細は、 DAL クラスを参照ください。

1.2.2. テーブルの定義

テーブルの定義は次の構文で行います。

>>> db.define_table('person',
...     Field('name'), format='%(name)s')

person という名前のテーブルを定義しています。

定義しているのは name というフィールドだけですが、自動的に主キーフィールドが追加されます。主キーフィールドは、id という名前で整数型になります。

上の構文では省略してありますが、フィールド定義の第二引数でフィールドタイプを指定します。指定しないと string(文字型)になります。つまり、name フィールドは文字型になります。

person テーブル構造

フィールド データ型
id 整数型(主キー)
name 文字列型

テーブル定義にはオプションも設定できます。構文で指定してている format というのもオプションの一つです。これは他のテーブルから参照された場合に、表示するフィールド値の設定を行っています。

テーブル定義の詳細は、DALクラスの define_table()Field クラスを参照してください。指定可能なデータ型はFieldコンストラクタの type パラメータで説明しています。

1.2.3. レコード挿入

レコード挿入は次の構文で行います。

>>> db.person.insert(name='Potamata')
1

db.personはテーブルのオブジェクトです。このオブジェクトに対してinsertメソッドを呼び出せば、レコードの追加が可能です。引数はフィールドと設定する値です。

戻り値は挿入レコードのidの値です。DALでは自動的にidの値を設定します。

詳細は、 Table を参照してください。

1.2.4. レコード検索と出力

レコード検索と出力には、様々な方法があります。しかし今回は、一番基本となる構文を示してみます。

>>> rows = db(db.person.id > 0).select()
>>> for row in rows:
...     print row.name
...
Potamata

db.person.id > 0 は条件式です。personテーブルのidフィールド値が0より大きい場合、真になります。selectメソッドにより、条件式に合致したレコードの塊が取り出されます。rowsはレコードの塊のため、for文で一レコード毎に分解して出力しています。

レコード検索の詳細は Query , Expression , Set を、出力に関しても Rows , Row なども参照してください。

1.2.5. レコード更新

レコードの更新は次の構文で行います。

>>> db(db.person.id == 1).update(name = 'Cotasata')
1

db.person.id == 1 は条件式です。personテーブルのidフィールド値が1の場合、真になります。updateメソッドにより、条件に合致したレコードが指定した値に更新されます。 更新値は辞書型でフィールドと値を指定します。

戻り値は更新したレコード件数になります。

詳細は、 Table を参照してください。

1.2.6. レコード削除

レコードの削除は次の構文で行います。

>>> db(db.person.id == 1).delete()
1

db.person.id == 1 は条件式です。personテーブルのidフィールド値が1の場合、真になります。deleteメソッドにより、条件に合致したレコードが削除されます。

戻り値は削除したレコード件数になります。

詳細は、 Table を参照してください。