Python 在同一类的另一个函数中获取函数的结果
我在Python3.7中的代码遇到了一个小问题:我想将第一个函数(getResult(self,result))中的查询结果与“InsertMeterCount()”函数中的查询结果进行比较。我怎么能用这个 我知道heritage如何进入不同的类,但不知道它的功能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
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:很抱歉,只发布了我代码的一部分,但在其顶部,我有我的数据库连接信息,我必须保密,因为我在一个真正的企业数据库上工作。