【问题标题】:Is it possible to use a returned column value as a table name in an SQLite query?是否可以在 SQLite 查询中使用返回的列值作为表名?
【发布时间】:2015-07-24 01:24:27
【问题描述】:

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

我希望编写一个使用the sqlite_master table 获取表列表然后查询它们的查询,所有这些都在一个查询中:

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

但是,当尝试执行这种查询方式时,我收到了错误no such table: Name。是否有替代语法允许这样做,还是根本不支持?

【问题讨论】:

  • 您只能使用动态 SQL 来执行此操作。

标签: sql sqlite


【解决方案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)

【讨论】:

  • 感谢您的回答。这段代码 sn-p 确实是我在此期间编写的供使用的代码。
猜你喜欢
  • 2015-10-06
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 2011-05-28
  • 2014-09-27
  • 1970-01-01
  • 2017-04-18
  • 1970-01-01
相关资源
最近更新 更多