【问题标题】:SQL use wildcard <% and placeholders <?> in a SELECT statement. (In python with sqlite3)SQL 在 SELECT 语句中使用通配符 <% 和占位符 <?>。 (在带有 sqlite3 的 python 中)
【发布时间】:2018-05-23 09:09:32
【问题描述】:

我正在尝试浏览基因名称列表并在我的 SQL 数据库中查询它们,如下所示:

list_of_genes = ["IFNL", "TMPT", "G6PD", "UGT1A1", ...]
for gene in list_of_genes:
    sql.execute('''SELECT DISTINCT gene_symbol, haplo_function FROM Haplotypes 
                   WHERE gene_symbol LIKE "%" + ? + "%"
                   ''', (gene,))

我想要完成的是从我的 Haplottypes 表中获取所有记录,其中 gene_symbollist_of_genes 中的 gene 相似。 列表中的基因可以称为IFNL,数据库中的gene_symbol 可能类似于IFNL*1 或类似名称。 此查询给出 0 个结果,那么如何将通配符与占位符一起添加到 SELECT 语句中?

如果我像下面这样查询它;我确实得到了很多结果,但不是全部,因为一些基因符号除了基因名称之外还添加了信息。

for gene in list_of_genes:
    sql.execute('''SELECT DISTINCT gene_symbol, haplo_function FROM Haplotypes 
                   WHERE gene_symbol LIKE  ?
                   ''', (gene,))

如果我问的是简单或愚蠢的问题,我很抱歉,但我已经尝试搜索它,但找不到任何结合 通配符和 ?占位符/参数。

【问题讨论】:

    标签: python parameters sqlite wildcard


    【解决方案1】:

    如果我的问题没问题,你可以试试这样的:

    cur.execute('SELECT * FROM t WHERE t.param LIKE ?', ("%" + val + "?",))
    

    【讨论】:

    • 确实将通配符的位置更改为语句之外的工作。而不是 (gene,) 我现在使用 ("%" + gene + "%",) 并且它有效!谢谢! (所以对您的答案稍作调整,将您的第二个 ? 替换为 %)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 2012-04-14
    • 2011-12-22
    • 1970-01-01
    相关资源
    最近更新 更多