Добро пожаловать в stackoverflow.В будущем попробуйте опубликовать полный пример кода.Кто-то может запустить и воспроизвести проблему, с которой вы столкнулись.Кроме того, опубликуйте полную полученную ошибку и объясните, что вместо этого вы ожидаете.
Вам необходимо передать result
в insertMetersCount
.Вы также можете дать ему более подходящее имя и прекратить использовать getResult
, который в основном представляет собой функцию идентификации и некоторую регистрацию.Кроме того, не интерполируйте значения в SQL.Вот как вы создаете уязвимости SQL-инъекций.Вам нужно будет найти правильный стиль параметров для библиотеки БД, которую вы используете.Я оставил "% s", но это может быть "?"или "\ 1" или что-то еще.
def insertMetersCount(self, meters_count):
log.info("Insert operation in Database.")
insertMetersQuery = """ INSERT INTO meter_count (mec_datetime, mec_count) VALUES (NOW(), %s)"""
return dbpool.runQuery(
insertMetersQuery, [meters_count]
)
Затем вызовите метод с необходимым аргументом.Вы можете сделать это с помощью обычного Deferred
API:
def checkDB(self):
d = self.getTotalMeters()
d.addCallback(self.insertMetersCount)
return d
или с помощью inlineCallbacks
:
from twisted.internet.defer import inlineCallbacks
@inlineCallbacks
def checkDB(self):
meters_count = yield self.getTotalMeters()
yield self.insertMetersCount(meters_count)
Обе эти ситуации обеспечивают одно и то же.Это всего лишь два разных API для этого.