1

Python 2.7 のsqlite3ライブラリを使用して、テーブルの列を特定するにはどうすればよいAUTOINCREMENTですか? SQLite コマンド ライン ユーティリティを使用できることはわかっていますが、プログラムでそれを行うにはどうすればよいですか。SQLite のドキュメントをざっと見たところ、PRAGMA見つけた最も近いコマンドはtable_info.

4

1 に答える 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 つのいずれかを実行できます。

  1. 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,)
    
  2. データを挿入すると、テーブル名がテーブルに表示され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 に答える