0

次のコードがあります。

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()

複数のフィールドを使用すると、次のトレースバックが表示されます。

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'

しかし、フィールドを 1 つだけ使用すると、rowCounter が整数と実数の戻り値として使用されます。

私の質問は、どうすれば複数のフィールドでそれを適応させることができますか?Where name = 'barak' and id != 3など:しかし、次のような1つのフィールド:Where name = 'barak'

4

1 に答える 1

3

最終結果の数を取得したいだけですか?その場合、実際には、 と の両方でqueryはなく、1 つのオブジェクトだけが必要です。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()

お役に立てれば。

于 2013-09-13T05:04:44.430 に答える