2.13. SQL文の生成

SQL文を発行する次のメソッドは、メソッド名の直前にアンダーバ(_)を付けると、メソッドは実行せずSQL文字列を 生成します。

各メッソドに対応した SQL文字列を生成して返す、アンダーバが付いたメソッドが別に用意されています。

>>> db.person._insert(name='xxxxx')
"INSERT INTO person(name) VALUES ('xxxxx');"

>>> db(db.person)._select()
'SELECT  person.id, person.name FROM person WHERE (person.id > 0);'

>>> db(db.person)._count()
'SELECT count(*) FROM person WHERE (person.id > 0)'

>>> db(db.person.id == 1)._update(name='xxxxx')
"UPDATE person SET name='xxxxx' WHERE (person.id = 1);"

>>> db(db.person.name == 'xxxxx')._delete()
"DELETE FROM person WHERE (person.name = 'xxxxx');"

>>> db.person._truncate()
['DELETE FROM person;', "DELETE FROM sqlite_sequence WHERE name='person';"]

>>> db.person._drop()
['DROP TABLE person;']

なお最後に発行したSQL文を保存する属性もあります。これについては DAL._lastsql を参照ください。

参考: Generating raw SQL生SQLの生成