python pypyodbc 写入 dBase 不工作
python pypyodbc writing to dBase not working
尝试让它工作时遇到了糟糕的时间。花了太多时间进行搜索,却得出了同样的例子,但没有帮助。
为自己制作了一个 GUI,它启动一个线程来读取串行端口并将一些 GPS 数据解析为 NMEA 语句。
我获取数据并想将其写入数据库而不是文本文件,只是为了使其更清晰。但是,当我写入数据库时,它会抛出一条错误消息:
'type' object has no attribute '__getitem__'
由于我对数据库的处理经验为零,而且 python 我对问题所在一筹莫展。
我知道它的 cur.execute INSERT 行抛出异常,我只是不知道如何修复它。
有人愿意帮我介绍一下吗?我猜这可能是语法?我正在使用 pynmea2 模块进行 GPS 解析,并使用 pypyodbc 模块来制作 MDB 文件。
如果我写硬编码数据,它工作正常。当我使用变量时,它就会崩溃。
try:
print ("Attempt to Execute...")
Ndx=ID;Tod=str(gps_msg.timestamp);Lat=str(gps_msg.latitude);Lon=str(gps_msg.longitude);TmpLat='0';TmpLon='0';Alt=str(gps_msg.altitude);Flags='0';SystemID=str(gps_msg.ref_station_id);NumSat=str(gps_msg.num_sats);dop='0';Ch1_RSSI=str(rssi_dB)
cur.execute("INSERT INTO LogFile(Ndx,Tod,Lat,Lon,TmpLat,TmpLon,Alt,Flags,SystemID,NumSat,dop,Ch1_RSSI) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)",([Ndx],[Tod],[Lat],[Lon],[TmpLat],[TmpLon],[Alt],[Flags],[SystemID],[NumSat],[dop],[Ch1_RSSI]))
print ("Attempting to commit...")
conn.commit()
print ("Commit succeeded..")
ID = ID + 1
except Exception as e:
errorLog.writelines('File Write Failure: {0}'.format(e)+"\n")
您正在尝试将参数值作为元素为单项列表的元组传递。那行不通的。参数必须作为单个值或对象的列表(或元组)传递。
所以,而不是通过
([Ndx],[Tod],[Lat], ... )
你应该过去了
[Ndx,Tod,Lat, ... ]
作为 .execute()
方法的第二个参数。
尝试让它工作时遇到了糟糕的时间。花了太多时间进行搜索,却得出了同样的例子,但没有帮助。
为自己制作了一个 GUI,它启动一个线程来读取串行端口并将一些 GPS 数据解析为 NMEA 语句。
我获取数据并想将其写入数据库而不是文本文件,只是为了使其更清晰。但是,当我写入数据库时,它会抛出一条错误消息:
'type' object has no attribute '__getitem__'
由于我对数据库的处理经验为零,而且 python 我对问题所在一筹莫展。
我知道它的 cur.execute INSERT 行抛出异常,我只是不知道如何修复它。
有人愿意帮我介绍一下吗?我猜这可能是语法?我正在使用 pynmea2 模块进行 GPS 解析,并使用 pypyodbc 模块来制作 MDB 文件。 如果我写硬编码数据,它工作正常。当我使用变量时,它就会崩溃。
try:
print ("Attempt to Execute...")
Ndx=ID;Tod=str(gps_msg.timestamp);Lat=str(gps_msg.latitude);Lon=str(gps_msg.longitude);TmpLat='0';TmpLon='0';Alt=str(gps_msg.altitude);Flags='0';SystemID=str(gps_msg.ref_station_id);NumSat=str(gps_msg.num_sats);dop='0';Ch1_RSSI=str(rssi_dB)
cur.execute("INSERT INTO LogFile(Ndx,Tod,Lat,Lon,TmpLat,TmpLon,Alt,Flags,SystemID,NumSat,dop,Ch1_RSSI) VALUES(?,?,?,?,?,?,?,?,?,?,?,?)",([Ndx],[Tod],[Lat],[Lon],[TmpLat],[TmpLon],[Alt],[Flags],[SystemID],[NumSat],[dop],[Ch1_RSSI]))
print ("Attempting to commit...")
conn.commit()
print ("Commit succeeded..")
ID = ID + 1
except Exception as e:
errorLog.writelines('File Write Failure: {0}'.format(e)+"\n")
您正在尝试将参数值作为元素为单项列表的元组传递。那行不通的。参数必须作为单个值或对象的列表(或元组)传递。
所以,而不是通过
([Ndx],[Tod],[Lat], ... )
你应该过去了
[Ndx,Tod,Lat, ... ]
作为 .execute()
方法的第二个参数。