一尘不染

是否可以在SQLite查询中使用返回的列值作为表名?

sql

我想编写一个查询来检查SQLite数据库中的所有表是否有一条信息,以便简化事后诊断(性能无关紧要)。

我希望编写一个查询,该查询使用sqlite_master表获取表列表,然后在一个查询中对其进行查询:

SELECT Name 
FROM sqlite_master
WHERE Type = 'table' AND (
    SELECT count(*)
    FROM Name
    WHERE conditions
    ) > 0;

但是,当尝试执行这种查询样式时,我收到一条错误消息no such table: Name。是否有其他语法允许这样做,还是根本不支持它?


阅读 131

收藏
2021-05-05

共1个答案

一尘不染

SQLite被设计为嵌入式数据库,即与“真实”编程语言一起使用。为了能够使用这种动态构造,您必须不使用SQLite本身:

cursor.execute("SELECT name FROM sqlite_master")
rows = cursor.fetchall()
for row in rows:
    sql = "SELECT ... FROM {} WHERE ...".format(row[0])
    cursor.execute(sql)
2021-05-05