【问题标题】:Pattern match "LIKE" and escape special character with Python postgres?模式匹配“LIKE”并使用 Python postgres 转义特殊字符?
【发布时间】:2015-03-08 16:15:13
【问题描述】:

如何使用以下 Python 代码进行模式匹配“LIKE”并转义特殊字符?我遇到特殊字符错误。

“参数”值为“1.1”、“1.2”、“1.3”

cr.execute("select sequence from account_stock_info "
"where sequence like '%s.%' "
"order by sequence ",
(tuple(parameter)))

PGADMIN 上的原始查询是:

select sequence from account_stock_info
where sequence like '1.1.%'
order by sequence

答案:“1.1.1”、“1.1.1.03”、“1.1.2”、“1.1.2.04”、“1.1.3”

请帮助 Python 模式匹配。

【问题讨论】:

    标签: python postgresql pattern-matching


    【解决方案1】:

    第一个错误是使用带有字符串参数的tuple 函数:

    >>> tuple('1.1')
    ('1', '.', '1')
    

    您可以显式传递元组:(parameter,) 或使用 dict 传递参数。

    要将百分号传递给LIKE 语句,您可以在查询中添加额外的百分号:

    parameter = "1.1"
    cr.execute("select sequence from account_stock_info "
               "where sequence like '%s.%%' "
               "order by sequence ",
               (parameter,))
    

    或者传入参数(这里可以去掉引号):

    parameter = "1.1.%"
    # ...
    "where sequence like %s "
    

    【讨论】:

    • 你有更完整的sql查询吗?在 Like 语句中传递参数仍有问题?
    • 我出错了。我的代码:parameter = "1.1.%" cr.execute("select id,name,sequence from account_stock_info " "where sequence like %s " "order by sequence ", (parameter,)) 错误:没有运算符与给定名称匹配和参数类型。您可能需要添加显式类型转换。 , 在查询中 select id,name,sequence from account_cash_move_type where sequence like %s order by sequence
    • 我出错了。似乎“序列”是 Postgre 中的保留字。现在如何使用序列列?
    猜你喜欢
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 2011-08-21
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多