Jak*_*ski 8 python mysql sqlalchemy
我有一个带有a first_name和last_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
谢谢!
你很接近,你需要在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)
| 归档时间: |
|
| 查看次数: |
1917 次 |
| 最近记录: |