【问题标题】:How to query for strings that have apostrophes or any kind of non-alphanumeric characters如何查询具有撇号或任何类型的非字母数字字符的字符串
【发布时间】:2016-01-07 20:51:55
【问题描述】:

我正在尝试使用SQLAlchemy 运行一些数据库查询。但我在查询带有撇号或任何类型的非字母数字字符的字符串时遇到问题。

例如:test = "I\'ve"

我用过:

matchList = session.query(Quote).filter(Quote.quote.contains(test)).all()

数据库中有 1 条记录包含 "I've" 作为子字符串。但是, matchList 原来是一个空列表。我做错了什么?

完整代码:

sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy_declarative import Base, Quote
from sqlalchemy_utils import escape_like

engine = create_engine("sqlite:///quotes.db")
Base.metadata.bind = engine
DBSession = sessionmaker(bind=engine)
session = DBSession()

test = "I\'ve"
qList = session.query(Quote).filter(Quote.quote.contains(test.replace('\'', ''))).all()
print qList

似乎SQLAlchemy 不处理转义序列。谁能帮忙

【问题讨论】:

  • '...filter(Quote.quote.co tains(test.replace('/', '')'怎么样?
  • 不工作,给我一个空列表[]
  • 对不起,把斜线转到另一边
  • 不,这行不通。
  • 是的,但是两个斜线? “\\”?

标签: python sqlalchemy non-alphanumeric


【解决方案1】:

python 字符串字面量

"I\'ve"

计算为字符串

"I've"

但是,您可能需要在数据库输入中使用实际的反斜杠,因此请尝试转义反斜杠而不是单引号:

"I\\'ve"

话虽如此,在我不知道的 SQLAlchemy 中,可能有更好的方法来逃避查询。像db.find(Quote.quote == "I've") 这样的东西,它会为你转义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    相关资源
    最近更新 更多