python - 在三引号中使用变量 (Python)

标签 python

我正在尝试将 2 个变量输入到 SQL 查询中,如下所示:

query = """
Select Distinct
    sp.NAME,
    sp.STUDY,
    sp.DISEASE_ONTOLOGY_TERM,
    sv.GENE,
    sv.CDS_EFFECT,
    sv.PROTEIN_EFFECT,
    rep.STATUS,
    sv.FRACTION_READS,
    sv.DEPTH,
    cvmship.REMOVED
  From
    SPECIMEN sp
    inner join CURATION_MANAGER cm on (cm.SPECIMEN_ID = sp.SPECIMEN_ID)
    inner join CURATION_VERSION cv on (cv.CURATION_VERSION_ID = cm.LATEST_VERSION_ID)
    inner join CURATION_VERSION_MEMBERSHIP cvmship on (cvmship.VERSION_ID = cv.CURATION_VERSION_ID)
    inner join CURATION_VERSION_MEMBER cvmer on (cvmer.CURATION_VERSION_MEMBER_ID = cvmship.MEMBER_ID)
    inner join REPORTABLE rep on (rep.CURATION_VERSION_MEMBER_ID = cvmer.CURATION_VERSION_MEMBER_ID)
    inner join SHORT_VARIANT sv on (sv.REPORTABLE_ID = rep.CURATION_VERSION_MEMBER_ID)
    inner join (
      Select
        sp.SPECIMEN_ID,
        cqr.STATUS
      From
        SPECIMEN sp
        inner join CURATION_MANAGER cm on (cm.SPECIMEN_ID = sp.SPECIMEN_ID)
        inner join CURATION_VERSION cv on (cv.CURATION_VERSION_ID = cm.LATEST_VERSION_ID)
        inner join CURATION_VERSION_MEMBERSHIP cvmship on (cvmship.VERSION_ID = cv.CURATION_VERSION_ID)
        inner join CURATION_VERSION_MEMBER cvmer on (cvmer.CURATION_VERSION_MEMBER_ID = cvmship.MEMBER_ID)
        inner join CURATION_QC_RESULT cqr on (cqr.CURATION_VERSION_MEMBER_ID = cvmer.CURATION_VERSION_MEMBER_ID)
    ) cqr on (cqr.SPECIMEN_ID = sp.SPECIMEN_ID)
  Where sp.ASSIGNED_INDEX is not null
    AND sp.NAME like 'TRF%'
    AND LENGTH(sp.NAME) = 12
    AND cv.STATUS = 'final'
    AND (cqr.STATUS = 'Pass' or cqr.STATUS = 'Qualified')
    AND sp.STUDY like '%CLINICAL%'
    AND sv.GENE = '%s'
    AND sv.PROTEIN_EFFECT = '%s'

    order by sp.name desc
""" % (gene, proEff)

当我运行这个脚本时,我得到:

  File "fetchDEVDB.py", line 57, in <module>
    """ % (gene, proEff)
ValueError: unsupported format character ''' (0x27) at index 1481

我想也许它试图将 % 解释为格式字符,但我尝试使用 %% 包围 %s 并得到相同的错误。有什么想法吗?

谢谢

最佳答案

您需要用“%”引用 LIKE 表达式,而不是格式字符:

...AND sp.NAME like 'TRF%%'
...
...AND sp.STUDY like '%%CLINICAL%%'

关于python - 在三引号中使用变量 (Python),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35485131/

相关文章:

bool 值作为索引的 Python 效果 (a[a==0] = 1)

python - python中的大变量使用后是否需要立即删除?

python - Pytest 和 Faker |在每次测试中使用相同的数据

python - Django JSONField过滤查询集,其中过滤值是带注释的总和值

python - 值错误 : day is out of range for month datetime

python - Python 套接字中连接被拒绝后出现无效参数

python - 当 Jupyter 单元格包含函数、循环或其他 block 时,是否可以将它拆分成多个单元格?

C++ 列表<T> 到 Python 列表

Python .replace() 内部双 For 循环问题

python - 制作不与父关闭的 tkinter 顶层窗口