Python 2.7 のsqlite3
ライブラリを使用して、テーブルの列を特定するにはどうすればよいAUTOINCREMENT
ですか? SQLite コマンド ライン ユーティリティを使用できることはわかっていますが、プログラムでそれを行うにはどうすればよいですか。SQLite のドキュメントをざっと見たところ、PRAGMA
見つけた最も近いコマンドはtable_info
.
質問する
1412 次
1 に答える
6
AUTOINCREMENT
主キーにのみ適用されます。したがって、特定のテーブルについて、PRAGMA table_info([tablename])
どの列が主キーであるかを判断するために使用できます。
>>> import sqlite3
>>> conn = sqlite3.connect(':memory:')
>>> conn.execute('CREATE TABLE foo (bar INTEGER PRIMARY KEY AUTOINCREMENT, baz)')
<sqlite3.Cursor object at 0x10a124f50>
>>> c = conn.cursor()
>>> c.execute('PRAGMA table_info("foo")')
<sqlite3.Cursor object at 0x10a124ef8>
>>> for row in c: print row
...
(0, u'bar', u'INTEGER', 0, None, 1)
(1, u'baz', u'', 0, None, 0)
>>> [col[0] for col in c.description]
['cid', 'name', 'type', 'notnull', 'dflt_value', 'pk']
したがって、行の最後の列がpk
行であり、そのためbar
に が に設定され1
ます。
主キーが自動インクリメントされているかどうかを判断するには、次の 2 つのいずれかを実行できます。
sqlite_master
テーブルにクエリを実行AUTOINCREMENT
し、スキーマに記載されているかどうかを確認します。>>> c.execute('SELECT 1 FROM sqlite_master WHERE tbl_name="foo" AND sql LIKE "%AUTOINCREMENT%"') <sqlite3.Cursor object at 0x10a124ef8> >>> c.fetchone() (1,)
データを挿入すると、テーブル名がテーブルに表示され
sqlite_sequence
ます。>>> c.execute('insert into foo (baz) values (1)') <sqlite3.Cursor object at 0x10a124ef8> >>> c.execute('SELECT 1 FROM sqlite_sequence WHERE name="foo"') <sqlite3.Cursor object at 0x10a124ef8> >>> c.fetchone() (1,)
于 2013-05-23T22:13:31.977 に答える