【问题标题】:SQLite + Python: How to use parameters for SELECT and UNION?SQLite + Python:如何为 SELECT 和 UNION 使用参数?
【发布时间】:2017-07-13 02:37:40
【问题描述】:

我想将多个 SELECT 结果合并到一个语句中。

我在 SO 上进行了搜索,但没有找到答案。但是我发现了一个类似的:sqlite combine select all from multiple columns

上面的问题和我的不同的是,我在语句中有参数。

这是我的密码...

cur.execute('''
SELECT * FROM Table1 WHERE ColA = ? 
UNION
SELECT * FROM Table1 WHERE ColB = ? 
UNION
SELECT * FROM Table1 WHERE ColC = ?
(ValueA, ValueB, ValueC,)''')

ValueA、ValueB、ValueC 是参数。

但它没有工作。我怎样才能更改代码?谢谢!

【问题讨论】:

  • 只是为了满足我自己的好奇心,你有什么理由不想用一个查询来选择这些,比如WHERE ColA = ValueA OR ColB = ValueB OR ColC = ValueCUNION 可以给你重复的行,但也许这就是我要问的问题的答案。
  • @Santi 感谢您的评论。如果我按照你写的那样做,结果会有所不同。此外,我认为命令 UNION ALL 给出了重复的行。
  • 参数仅在您从宿主语言访问 SQL 时使用。显示该代码。
  • @doglas 您需要重新阅读有关查询参数如何在 Python 中工作的文档。它们不进入 SQL 查询字符串。
  • @doglas - 你的问题解决了吗?只需将值移动到执行的参数 arg:cur.execute(<sql statement>, (ValueA, ValueB, ValueC))

标签: python sqlite


【解决方案1】:

我想也许这可以帮助你:

cur.execute('SELECT * FROM Table1 WHERE colc =(?,?,?)', valueA,ValueB,ValueC)

【讨论】:

    【解决方案2】:

    查询参数不属于查询字符串,但必须是execute的第二个参数:

    cur.execute('''
        SELECT * FROM Table1 WHERE ColA = ? 
        UNION
        SELECT * FROM Table1 WHERE ColB = ? 
        UNION
        SELECT * FROM Table1 WHERE ColC = ?''',
        (ValueA, ValueB, ValueC))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-04
      • 2012-03-02
      • 1970-01-01
      • 1970-01-01
      • 2015-10-19
      • 1970-01-01
      • 2012-03-06
      • 1970-01-01
      相关资源
      最近更新 更多