用Python遍历SQLite数据库中每个表的第一列(属性)
我正在用Python写一个工具,帮助分析SQLite数据库的一致性。之前我手动发现了一些不一致的地方,所以我想如果能批量处理这些问题,就能节省时间。我开始尝试用Python来实现这个功能,但遇到了一些困难。
假设我已经连接上数据库,创建了一个游标,并执行了一两个查询,得到了一个结果集,我想要遍历这个结果集。我想做的事情大概是这样的(每个表都有一个ID作为主键):
# python/pseudocode of what I'm looking for
for table in tables:
for pid in pids:
query = 'SELECT %s FROM %s' % (pid, table)
result = connection.execute(query)
for r in result:
print r
这样的话,我就能从每个表中得到一个ID的列表。但我不太确定我是否在正确的方向上。
问题在于,有些表的主键叫ID
,而其他表的主键叫TABLE_ID
,等等。如果它们都是ID
,我就可以从每个表中选择ID,但现在不是这样。这就是我希望能找到一个查询,允许我只选择每个表的第一列或主键的原因。
1 个回答
1
要获取一个表的列信息,可以执行一个叫做 PRAGMA table_info 的查询。查询结果中的 pk
列会显示哪些列是主键的一部分:
> CREATE TABLE t(
> other1 INTEGER,
> pk1 INTEGER,
> other2 BLOB,
> pk2 TEXT,
> other3 FLUFFY BUNNIES,
> PRIMARY KEY (pk1, pk2)
> );
> PRAGMA table_info(t);
cid name type notnull dflt_value pk
--- ------ -------------- ------- ---------- --
0 other1 INTEGER 0 0
1 pk1 INTEGER 0 1
2 other2 BLOB 0 0
3 pk2 TEXT 0 2
4 other3 FLUFFY BUNNIES 0 0