資料源
我正在實時接收來自駕駛模擬器的資料。下面是一個socket程式,從模擬器接收資料,然后列印出來:
import socket
import struct
UDP_IP = "127.0.0.1"
UDP_PORT = 4001
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
while True:
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
fields = struct.unpack_from('=ddd', data)
print(fields[0],fields[1],fields[2])
輸出
列印的資料在 shell 中顯示如下:

我想做的事
我想將這些資料存盤在資料庫中。后來,我想在一個應用程式中使用資料庫。我的問題是:如何創建一個可以存盤和保存這些實時資料的資料庫?我沒有創建資料庫的先驗知識。請指導我了解相關資源。
我嘗試過的:
我首先在擁有套接字腳本的同一位置創建了一個資料庫(如上所述):
資料庫創建:
import sqlite3
conn = sqlite3.connect('test_database')
c = conn.cursor()
c.execute('''
CREATE TABLE IF NOT EXISTS position
([y] REAL PRIMARY KEY, [x] REAL, [z] REAL)
''')
conn.commit()
嘗試使用實時資料更新資料庫:
然后我修改了我的腳本檔案以將資料存盤在資料庫中,如下所示:
import socket
import struct
import sqlite3
conn = sqlite3.connect('test_database')
c = conn.cursor()
UDP_IP = "127.0.0.1"
UDP_PORT = 4001
sock = socket.socket(socket.AF_INET, # Internet
socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
while True:
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
fields = struct.unpack_from('=ddd', data)
#print("received message:", data)
print(fields[0],fields[1],fields[2])
#sock.sendto(fields.encode(), ("127.0.0.1",7070))
c.execute('''
INSERT INTO position (y, x, z)
VALUES
(fields[0],fields[1], fields[2])
''')
conn.commit()
錯誤:
但我收到以下錯誤:
2315.259850934807 35025.972653539255 -1.7375892216255708
Traceback (most recent call last):
File "C:\NadsMiniSim_2.3\bin.x64\testIP-UDP3.py", line 22, in <module>
c.execute('''
sqlite3.OperationalError: near "[0]": syntax error
我不確定出了什么問題。請指導我。
uj5u.com熱心網友回復:
使用占位符將資料插入到 sqlite 表的正確語法是
c.execute(
'INSERT INTO position (y, x, z) VALUES (?, ?, ?)',
(fields[0], fields[1], fields[2]),
)
即使用?而不是值,然后將許多值作為元組傳遞。
另一種選擇是使用命名占位符:
c.execute(
'INSERT INTO position (y, x, z) VALUES (:y, :x, :z)',
{'y': fields[0], 'x': fields[1], 'z': fields[2]},
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/360642.html
上一篇:使用樞軸運算子劃分成績總和
