gpt4 book ai didi

mysql - Python 3 MySQL GPS跟踪器数据库插入错误

转载 作者:行者123 更新时间:2023-11-29 18:34:19 25 4
gpt4 key购买 nike

我是Python编程的初学者(学习和实践不超过6个月)。我的车上安装了一个 GPS 追踪器,我父亲的车上也安装了另一个。我想将这两个 GPS 跟踪器发送的所有数据记录到数据库中以供将来统计。一切工作正常,直到我尝试将通过 TCP 接收到的数据写入 mysql 表中。

我试图找到问题的解决方案,但没有成功( hereherehere )。任何想法、帮助,无论我有多小,都会受到赞赏。

Console error message Get data from ('tracker_ip', 25904) ('tracker_id', latitude, longitude, '102456', '010817', 'N', 'E', '0', '0.00', 10.3) error: uncaptured python exception, closing channel <main.EchoHandler connected tracker_ip:25904 at 0x7f627f6e2b38> (:dbinsert() missing 1 required positional argument: 'data_tuple' [/usr/lib/python3.5/asyncore.py|read|83] [/usr/lib/python3.5/asynco re.py|handle_read_event|423] [server3_1.py|handle_read|84])

我的代码

#!/usr/bin/python3
import pymysql
import asyncore
import socket
import re


class Database():
def __init__(self):
self.dbconnection = pymysql.connect('localhost','db_user','password','db' )
self.cursor = self.dbconnection.cursor()

sql = """CREATE TABLE IF NOT EXISTS GPS (
signature CHAR(50) NOT NULL,
latitude REAL,
orientationNS CHAR(1),
longitude REAL,
orientationEV CHAR(1),
gpstime CHAR(10),
gpsdate CHAR(10),
speed CHAR(6),
direction CHAR(3),
distance REAL)"""
self.cursor.execute(sql)
self.dbconnection.commit()


def dbinsert(self,data_tuple):

cmd =("""INSERT INTO GPS (signature,latitude,longitude,gpstime,gpsdata,orientationNS,orientationEV,direction,speed,distance)\
VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)""")
self.cursor.execute(cmd,data_tuple)
self.dbconnection.commit()



def __del__(self):
self.dbconnection.close()



class ClientHandler(asyncore.dispatcher):

def ConvertCoordinates(self,latitude,longitude):
lat_degree = int(float(latitude) / 100);
lng_degree = int(float(longitude) / 100);
# Extracting minutes for latitude and longitude
lat_mm_mmmm = float(latitude) % 100
lng_mm_mmmmm = float(longitude) % 100

converted_latitude = lat_degree + (lat_mm_mmmm / 60)
converted_longitude = lng_degree + (lng_mm_mmmmm / 60)
return (converted_latitude,converted_longitude) #tuple

def GetData(self,data_string):
data_list = re.sub(r'\s', '', data_string).split(',')
signature = data_list[1]
latitude,longitude = self.ConvertCoordinates(data_list[5],data_list[7])
orientationNS = data_list[6] #latitude
orientationEV = data_list[8] #longitude
gpstime = data_list[3]
gpsdate =data_list[11]
gps_fix_validate = data_list[4] #
speed= data_list[9]
direction = data_list[10]
distance = 10.3 #dummy data
return (signature,latitude,longitude,gpstime,gpsdate,orientationNS,orientationEV,direction,speed,distance)


def handle_read(self):
data = self.recv(8192)
data_string = data.decode(errors="ignore")
#print(len(data_string))
if len(data_string) >= 84 and len(data_string) <= 88 :
data_tuple = self.GetData(data_string)
print(data_tuple)
Database.dbinsert(data_tuple)


class DataServer(asyncore.dispatcher):

def __init__(self, host, port):
asyncore.dispatcher.__init__(self)
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.set_reuse_addr()
self.bind((host, port))
self.listen(5)

def handle_accept(self):
pair = self.accept()
if pair is None:
return
else:
sock, addr = pair
print('Get data from %s' % repr(addr))
handler = ClientHandler(sock)

database=Database()
server = DataServer('192.168.10.10', 21112)
asyncore.loop()

最佳答案

我喜欢你对汽车和 GPS 所做的事情。如果没有前面的工作代码来处理变量,调试这种事情并不容易,但有一些想法,就像使用过的pymysql 很多,也得到了这个错误缺少 1 个必需的位置参数

要尝试的事情:

  1. 去掉括号 cmd =("""INSERT INTO GPS (signature,latitude,longitude,gpstime,gpsdata,orientationNS,orientationEV,direction,speed,distance) VALUES (%s,%s) ,%s,%s,%s,%s,%s,%s,%s,%s)""") 并暂时将其放在一行中,即使这违反了 PEP 8 规则。检查了我的代码,该字符串周围没有括号。

  2. 在这里尝试使用一组额外的括号,如下所示:self.cursor.execute((cmd,data_tuple))

  3. 在你的handle_read函数中尝试使用一组额外的括号:Database.dbinsert((data_tuple))

  4. cursorclass=pymysql.cursors.DictCursor 添加到此处括号中的内容 ('localhost','db_user','password','db' ) 为了安全起见,您甚至可能需要使用句柄、host='localhost' 等填写这些内容。

无论如何,我希望其中一件事能够发挥作用,根据我的经验,当括号出现问题时会出现错误消息,因为这些变量是在函数之间传递的。

关于mysql - Python 3 MySQL GPS跟踪器数据库插入错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45432324/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com