简体   繁体   English

sqlalchemy以及如何计算行

[英]sqlalchemy and how to count row

I have the following code: 我有以下代码:

query = self.dbObj.session.query(MaterialsTable)
rowCounter = self.dbObj.session.query(MaterialsTable)

for attr , val in interfaceCodesObject.filterNameDict.items():
    query = query.filter(and_(getattr(MaterialsTable,attr).like("%%%s%%" % val)))
    rowCounter = rowCounter.filter(and_(getattr(MaterialsTable,attr).like("%%%s%%" % val))).count()
query.all()

When i use mutiple field, i get the following traceback: 当我使用多字段时,我得到以下回溯:

Traceback (most recent call last):
  File "/home/mohsen/codes/amlak/amlak/src/ui/materialsFindFrame.py", line 202, in <lambda>
    QtCore.QObject.connect(self.pushButtonSearch, QtCore.SIGNAL(_fromUtf8("clicked()")), lambda: self.interfaceCodesConstructor.responseToRequestForData(self))
  File "/home/mohsen/codes/amlak/amlak/src/ui/interface/interface.py", line 109, in responseToRequestForData
    self.materialsObejct.findData(self.objectSearchMaterials,self)
  File "/home/mohsen/codes/amlak/amlak/src/materials/materials.py", line 133, in findData
    rowCounter = rowCounter.filter(and_(getattr(MaterialsTable,attr).like("%%%s%%" % val))).count()
AttributeError: 'long' object has no attribute 'filter'

But when i use just one field it use rowCounter as integer and real return. 但是,当我只使用一个字段时,它将rowCounter用作整数和实际返回值。

My question is , how can i adapt it with multiple field?Such as : Where name = 'barak' and id != 3 But one filed such as : Where name = 'barak' 我的问题是 ,如何适应多个字段?例如: Where name = 'barak' and id != 3但有一个文件如: Where name = 'barak'

Do you just want to get the count of final result? 您是否只想获得最终结果的计数? In that case, in fact, you just need only one query object instead of both query and rowCounter . 实际上,在那种情况下,您只需要一个query对象,而不是queryrowCounter

query = self.dbObj.session.query(MaterialsTable)
for attr , val in interfaceCodesObject.filterNameDict.items():
    query = query.filter(and_(getattr(MaterialsTable,attr).like("%%%s%%" % val)))

# all result rows
query.all()

# count of rows
rowCounter = query.count()

Hope this helps. 希望这可以帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM