Python 在查询中多次使用sqlalchemy.sql函数

Python 在查询中多次使用sqlalchemy.sql函数,python,mysql,python-2.7,sqlalchemy,Python,Mysql,Python 2.7,Sqlalchemy,我正在使用sqlalchemy版本0.7.8。我遇到了一个问题,我的用户可以用纯英语搜索文本,但数据库中的记录在文本之间可以有特殊字符。因此,如果用户输入“请早点到医院来”,在db中输入“请早点到医院来。”,那么我的查询必须准确返回请早点到医院。 我找到了这个简单的解决办法 needle = func.replace(func.replace(Message.text, ',', ''), '.', '') Message.query.filter(needle==query_term.stri

我正在使用sqlalchemy版本0.7.8。我遇到了一个问题,我的用户可以用纯英语搜索文本,但数据库中的记录在文本之间可以有特殊字符。因此,如果用户输入“请早点到医院来”,在db中输入“请早点到医院来。”,那么我的查询必须准确返回请早点到医院。

我找到了这个简单的解决办法

needle = func.replace(func.replace(Message.text, ',', ''), '.', '')
Message.query.filter(needle==query_term.strip()).one()
但问题是,db中可能有许多特殊字符,如“!;:?&”等,指针看起来效率很低,因此请向我建议任何有效的解决方案,以避免重复func.replace函数

我在stackoverflow上找不到相同的问题。如果有人已经回答了,请告诉我

将查询与

下面是一些例子


另请参见此项。

您可以使用此项删除python中的所有空间字符

>>> impore re
>>> string = "please, come early# to the@ hospital"
>>> cleanString = re.sub('\W+',' ', string )
>>> print cleanString
please come early to the hospital

将文本作为字符串存储在变量中,然后使用此变量运行查询。

感谢所有回复。我可以通过这种方式来改进它

IGNORE_CHARS = [',', '.', '!', '&', ';', ':', '@']
needle = build_replace_func(IGNORE_CHARS, Message.text)
record = Message.query.filter(needle == query_term.strip()).one()

def build_replace_func(chars, attr, replace_with=''):
    for character in chars:
        attr = func.replace(attr, character, replace_with)
    return attr