【问题标题】:SQLAlchemy double-quoting LIKE filterSQLAlchemy 双引号 LIKE 过滤器
【发布时间】:2014-09-08 20:11:27
【问题描述】:

由于某种原因,SQLAlchemy 将我的查询的 LIKE 过滤器值双引号!

代码是这样的:

query = app.db.session.query(model.Attribute)\   
  .filter(model.Attribute.name == 'photo0')\
  .filter(model.Attribute.value.like('%' + file + '%'))\
  .all()

非常简单直接。它应该产生类似value LIKE '%78744154439.htm%' 的东西,但 SQLAlchemy 正在添加额外的双引号。

这是来自该查询的数据库回显:

2014-07-17 14:32:24,472 INFO sqlalchemy.engine.base.Engine SELECT attributes.listing_id AS attributes_listing_id, attributes.id AS attributes_id, attributes.name AS attributes_name, attributes.value AS attributes_value 
FROM attributes 
WHERE attributes.name = %s AND attributes.value LIKE %s
2014-07-17 14:32:24,472 INFO sqlalchemy.engine.base.Engine ('photo0', '"%78744154439.htm%"')

我试图逃避 % 认为这是由于字符串转义,但仍然没有!

我正在运行 Python 2.7.6,SQLAlchemy 0.9.6 和 MySQL-python 1.2.5 作为我的 DBAPI。

【问题讨论】:

    标签: python mysql python-2.7 sqlalchemy


    【解决方案1】:

    您可以使用以下语法解决此问题:

    from sqlalchemy.sql import text
    
    query = app.db.session.query(model.Attribute)\      
           .filter(model.Attribute.name == 'photo0')\   
           .filter(model.Attribute.value.like(text("'%" + file + "%'"))\   
           .all()
    

    HTH

    【讨论】:

    • 这对 SQL 注入开放。
    猜你喜欢
    • 2015-03-31
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2016-06-16
    • 2015-01-15
    • 2012-05-03
    • 2016-09-17
    相关资源
    最近更新 更多