如何使用SQLAlchemy使用LIKE过滤连续的列?

Jak*_*ski 8 python mysql sqlalchemy

我有一个带有a first_namelast_name列的用户表.我正在尝试创建一个SQLAlchemy查询,它将在两列的连接上执行类似IE的全名.这是一个例子

first_name: Bob

last_name: Smith

query = "bob smi"

我正在寻找类似的查询:

session.query(Person).filter((Person.firstName + " " + Person.lastName).like(query+'%')

这样一个搜索bob smi将返回bob smith

谢谢!

MOC*_*KBA 8

你很接近,你需要在sqla中构造以下查询:

root@localhost [inDB]> SELECT * FROM Person;
+-----------+------------+-----------+
| person_id | first_name | last_name |
+-----------+------------+-----------+
|         1 | Bob        | Smith     |
|         2 | John       | Smith     |
+-----------+------------+-----------+
2 rows in set (0.00 sec)

root@localhost [inDB]> SELECT * FROM Person WHERE CONCAT(first_name, ' ', last_name) LIKE 'Bob Sm%';
+-----------+------------+-----------+
| person_id | first_name | last_name |
+-----------+------------+-----------+
|         1 | Bob        | Smith     |
+-----------+------------+-----------+
Run Code Online (Sandbox Code Playgroud)

那么很明显你需要一个带有concat()函数的过滤器:

from sqlalchemy import func
res = session.query(Person).filter(func.concat(Person.first_name, ' ', Person.last_name).like('Bob Sm%')).all()
len(res)  # is 1
res, = res
print res.first_name, res.last_name  # 'Bob Smith'
Run Code Online (Sandbox Code Playgroud)