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という値が取得できている。
新しいコメントの投稿