Python 在同一类的另一个函数中获取函数的结果

Python 在同一类的另一个函数中获取函数的结果,python,function,twisted,Python,Function,Twisted,我在Python3.7中的代码遇到了一个小问题:我想将第一个函数(getResult(self,result))中的查询结果与“InsertMeterCount()”函数中的查询结果进行比较。我怎么能用这个 我知道heritage如何进入不同的类,但不知道它的功能 from twisted.enterprise import adbapi from twisted.internet import task import logging from datetime import datetime

我在Python3.7中的代码遇到了一个小问题:我想将第一个函数(getResult(self,result))中的查询结果与“InsertMeterCount()”函数中的查询结果进行比较。我怎么能用这个

我知道heritage如何进入不同的类,但不知道它的功能

from twisted.enterprise import adbapi
from twisted.internet import task
import logging
from datetime import datetime
from twisted.internet import reactor


class MetersCount():

    def getTotalMeters(self):
        log.info("Select operation in Database.")
        getMetersQuery = """ SELECT count(met_id) as totalMeters FROM meters WHERE DATE(met_last_heard) = DATE(NOW()) """

        return dbpool.runQuery(getMetersQuery).addCallback(self.getResult).addErrback(self.errorGetQuery)

    def getResult(self, result):
        print ("Receive Result : ")
        print (result)
        # general purpose method to receive result from defer.
        return result

    def errorGetQuery(self,result):
        print ("error received", result)
        return result

    def insertMetersCount(self):
        log.info("Insert operation in Database.")
        insertMetersQuery = """ INSERT INTO meter_count (mec_datetime, mec_count)  VALUES (NOW(), %s)""" % (self.getResult(result)) 
        return dbpool.runQuery(insertMetersQuery).addCallback(self.getResult)

    def checkDB(self):
        self.getTotalMeters()
        self.insertMetersCount()

a= MetersCount()

a.checkDB()

reactor.run()

这就是我遇到的错误:“NameError:未定义全局名称‘result’。

欢迎使用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而已。

不必在这行中给出getResult方法:“return dbpool.runQuery(insertMetersQuery).addCallback(self.getResult)“结果如何?这表明getter不会将返回作为参数。请使用完整的错误回溯更新您的问题。非常感谢,它的工作方式与预期的一样。P.s:很抱歉,只发布了我代码的一部分,但在其顶部,我有我的数据库连接信息,我必须保密,因为我在一个真正的企业数据库上工作。