我正在尝试使用SQLAlchemy
运行一些数据库查询。但我在查询带有撇号或任何非字母数字字符的字符串时遇到了问题。
例如:test="I\have"
我用过:
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
似乎不处理转义序列。有人能帮助吗
python字符串文字
"I've"
对字符串求值
"I've"
但是,在数据库输入中可能需要一个实际的反斜杠,所以请尝试转义反斜杠而不是单引号:
"I\'ve"
尽管如此,在SQLAlchemy中可能有一种更好的方法来逃避我不知道的查询。像db.find(Quote.quote == "I've")
这样的东西,它为你做逃跑。
我只是遇到了同样的问题,但转义并没有帮助,因为我没有意识到存储在数据库中的不是我认为的撇号,而是智能撇号。出于某种原因,Genius API返回了智能省略号,这就是我添加到数据库中的内容。
# In the database (smart apostrophe returned by Genius):
"Cat’s in the Cradle"
# What I was searching for (regular apostrophe)
"Cat's in the Cradle"
我认为一个可能的解决方案是在搜索过程中将智能撇号替换为常规撇号。