python - 从python中的数据库实时获取数据
问题描述
我在 Python 中有一个用于多处理的类,它创建了 3 个不同的进程。第一个过程用于检查我的硬件是否有任何信号并将其推送到队列中,第二个过程用于将数据从队列中取出并将其推送到数据库中,第三个过程用于将数据从数据库中取出并将其推送到服务器上。
obj = QE()
stdFunct = standardFunctions()
watchDogProcess = multiprocessing.Process(target=obj.watchDog)
watchDogProcess.start()
pushToDBSProcess = multiprocessing.Process(target=obj.pushToDBS)
pushToDBSProcess.start()
pushToCloud = multiprocessing.Process(target=stdFunct.uploadCycleTime)
pushToCloud.start()
watchDogProcess.join()
pushToDBSProcess.join()
pushToCloud.join()
我的前两个进程按需要完美运行,但是我正在努力处理第三个进程。以下是我的第三个过程的代码:
def uploadCycleTime(self):
while True:
uploadCycles = []
lastUpPointer = "SELECT id FROM lastUploaded"
lastUpPointer = self.dbFetchone(lastUpPointer)
lastUpPointer = lastUpPointer[0]
# print("lastUploaded :"+str(lastUpPointer))
cyclesToUploadSQL = "SELECT id,machineId,startDateTime,endDateTime,type FROM cycletimes WHERE id > "+str(lastUpPointer)
cyclesToUpload = self.dbfetchMany(cyclesToUploadSQL,15)
cyclesUploadLength = len(cyclesToUpload)
if(cyclesUploadLength>0):
for cycles in cyclesToUpload:
uploadCycles.append({"dataId":cycles[0],"machineId":cycles[1],"startDateTime":cycles[2].strftime('%Y-%m-%d %H:%M:%S.%f'),"endDateTime":cycles[3].strftime('%Y-%m-%d %H:%M:%S.%f'),"type":cycles[4]})
# print("length : "+str(cyclesUploadLength))
lastUpPointer = uploadCycles[cyclesUploadLength-1]["dataId"]
uploadCycles = json.dumps(uploadCycles)
api = self.dalUrl+"/cycle-times"
uploadResponse = self.callPostAPI(api,str(uploadCycles))
print(lastUpPointer)
changePointerSQL = "UPDATE lastUploaded SET id="+str(lastUpPointer)
try:
changePointerSQL = self.dbAbstraction(changePointerSQL)
except Exception as errorPointer:
print("Pointer change Error : "+str(errorPointer))
time.sleep(2)
现在我正在保存一个指针来记住最后上传的 id,并从那里继续上传 15 个数据包。当数据库中存在数据时,代码运行良好,但是如果在启动过程时不存在数据并且随后发送数据,则它无法从数据库中获取数据。
我尝试实时打印长度,尽管数据不断实时推送到数据库中,但它一直给我 0。
解决方案
在我的上传过程中,我错过了一次 commit()
def dbFetchAll(self,dataString):
# dataToPush = self.cycletimeQueue.get()
# print(dataToPush)
dbTry = 1
try:
while(dbTry == 1): # This while is to ensure the data has been pushed
sql = dataString
self.conn.execute(sql)
response = self.conn.fetchall()
dbTry = 0
return response
# print(self.conn.rowcount, "record inserted.")
except Exception as error:
print ("Error : "+str(error))
return dbTry
***finally:
self.mydb.commit()***
推荐阅读
- python - torch.softmax 和 torch.sigmoid 在二进制情况下不等价
- oracle - 使用 FSAL 运行功能将 oracle 报告 12c 与运行的 oracle 表单 12c 集成
- node.js - 何从特定位置将文件上传到 node.js 中的 Amazon S3
- c - 我需要一种只接受大写字母的方法
- synchronization - 如何在 DirectX / Direct3D 12 中使用栅栏同步 CPU 和 GPU?
- php - 具有引用列名的多对多原则
- android - Cordova-res 未安装在 ionic cordova
- c# - 如何使用实体框架将文件上传到一个列到服务器?
- python - 如何改变 x 轴在对数刻度中从较大的值开始到最小的值?
- android - Firebase 测试运行时 - iOS UI 测试的运行时间是 Android 测试的两倍