用Python遍历SQLite数据库中每个表的第一列(属性)

0 投票
1 回答
857 浏览
提问于 2025-04-18 01:04

我正在用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 

撰写回答