使用 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
.
要确定主键是否完全自动递增,您可以执行以下两项操作之一:
查询
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 回答