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 なども参照してください。