Sqlalchemy 为什么我的两个SQL迭代不同?
我在python中有以下SQLAlchemy迭代:Sqlalchemy 为什么我的两个SQL迭代不同?,sqlalchemy,iteration,Sqlalchemy,Iteration,我在python中有以下SQLAlchemy迭代: for business in session.query(Business).filter(Business.name.like("%" + term + "%")): print business.name 我的列表中大约有7000家企业,时间不到10毫秒。太好了 然而,我想支持比like更具体的搜索算法——例如,我想匹配&with和,等等。因此,我尝试了以下方法: for business in session.query(
for business in session.query(Business).filter(Business.name.like("%" + term + "%")):
print business.name
我的列表中大约有7000家企业,时间不到10毫秒。太好了然而,我想支持比like更具体的搜索算法——例如,我想匹配&with和,等等。因此,我尝试了以下方法:
for business in session.query(Business):
if term in business.name:
print business.name
后者的运行时间约为600毫秒。SQLAlchemy在其过滤器调用中做了什么,使得迭代速度更快?我怎样才能让我的更快
谢谢 SA不会优化您的查询。
您的区别在于:
业务
对象,这取决于您的模型,可能是相对昂贵的操作。此外,如果您有急切的加载关系,它也会加载这些关系。只需直接对数据库运行以下两个查询,查看每个查询返回的行数:
SELECT * FROM Business WHERE Name LIKE '%term%';
SELECT * FROM Business;
我建议对大量对象使用SQL引擎过滤功能,因为您可以更高效地直接进行大部分过滤谢谢!你能推荐这样的过滤功能吗?我正在使用SQLite,但MySQL也是一个option@Raiders. 我指的不是任何特殊的过滤功能,而是
WHERE
语句。真正的区别在于,在这种情况下,您只从数据库中加载一些数据行并为它们创建Python对象,而在当前设置中,您从表中加载所有行,为它们装入Python对象,然后丢弃一些;除了花费更多的时间外,这些物体仍然留在记忆中。