我有一个Flask应用程序,它有一个搜索栏,用户可以在其中搜索数据库以供用户使用。这是代码:
users = []
for keyword in query.split():
result = db.session.query(Users).filter(User.name.contains(keyword)).all()
for user in result:
users.append(user.name)
使用上面的示例,如果我要搜索' a'然后每个用户都带着字母' a'他们的名字会出现。如何搜索用户表,以便不是按字母搜索,而是按字搜索?感谢。
答案 0 :(得分:1)
您可以在SQLAlchemy中使用正则表达式:
result = db.session.query(Users).filter(User.name.op('regexp')(r'\b{}\b'.format(keyword))).all()
\ b 匹配空字符串,但仅匹配单词的开头或结尾。单词被定义为字母数字或下划线字符的序列,因此单词的结尾由空格或非字母数字的非下划线字符表示。请注意,正式地,\ b被定义为\ w和\ W字符之间的边界(反之亦然),或者在\ w和字符串的开头/结尾之间,因此被认为是字母数字的精确字符集取决于关于UNICODE和LOCALE标志的值。例如,r' \ bfoo \ b'匹配' foo',' foo。','(foo)',' bar foo baz'但不是' foobar'或者' foo3'。在字符范围内,\ b表示退格符,以便与Python的字符串文字兼容。