0

我正在尝试使用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不处理转义序列。谁能帮忙

4

1 回答 1

1

python字符串文字

"I\'ve"

对字符串求值

"I've"

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

"I\\'ve"

综上所述,可能有一种更好的方法可以在我不知道的 SQLAlchemy 中转义查询。像db.find(Quote.quote == "I've")它为你逃跑的地方。

于 2016-01-07T20:55:56.867 回答