SQLite での SEQUENCE

FAQ : How do I create an AUTOINCREMENT field. で説明されているように、フィールドを INTEGER PRIMARY KEYで定義しておき、INSERT でそのフィールドに null値を代入すると、自動的に SEQUENCE 値が代入される。

あと、SEQUENCE値として代入された数値を取り出す場合は、API sqlite_last_insert_rowid() を使用する。

以下のような SQL文でも取得可能である。

SELECT last_insert_rowid();

Python で、pysqlite モジュールを使用した場合は、Cursor クラスの lastrowid プロパティを参照することで取得可能なようだ。ちょっと試してみた

% python2.3
Python 2.3.3 (#3, Feb 13 2004, 03:06:38)
[GCC 3.2.2 [FreeBSD] 20030205 (release)] on freebsd5
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite
>>> con = sqlite.connect("test.db")
>>> cursor = con.cursor()
>>> cursor.execute("SELECT * FROM test")
>>> cursor.fetchall()
[(1, '1', '2'), (2, '3', '4')]
>>> cursor.execute("INSERT INTO test VALUES (NULL, 'hoge', 'hoge')")
>>> cursor.lastrowid
3
>>> cursor.execute("SELECT * FROM test")
>>> cursor.fetchall()
[(1, '1', '2'), (2, '3', '4'), (3, 'hoge', 'hoge')]
>>> con.commit()

一つ目のフィールドに NULL を 入れたことによって、新しく追加されたレコードの一つ目のフィールドには 3が代入されている。また、INSERT 直後の cursor.lastrowid でも 3という値が取得できている。

新しいコメントの投稿

このフィールドの内容は非公開にされ、公表されることはありません。
  • HTMLタグは使用できません
  • 行と段落は自動的に折り返されます。

書式オプションに関するより詳しい情報...

CAPTCHA
この質問はあなたが人間であるかどうかについて調べる為と、自動化したスパムを防ぐ為のものです。うまくいかない場合は電子メールでお問い合わせ下さい。
イメージ CAPTCHA
画像の中に見える文字を入力して下さい