Seite 1 von 1
GPS Daten in MySQL schreiben
Verfasst: Dienstag 20. Mai 2014, 17:48
von obelixus
Hallo,
ich bin noch neu bei Python und MySQL, habe aber durch viel lesen und probieren schonmal ein paar Dinge hin bekommen. Aber nun habe ich ein Script das GPS Daten aus einem Empfänger liest und in der Linuxkonsole mit dem "Print" Befehl ausgibt. Mein Problem ist nun das ich es nicht hinbekomme das zu ändern das alles in eine MySQL Datenbank geschrieben wird. Könnt ihr mir vielleicht helfen?
Mein Script ist von "Kampis Elektroecke"
http://kampis-elektroecke.de/?page_id=3674
Es müßte so sein das beim starten von dem Script die Tabelle geleert wird und dann die neuen Daten vom GPS gespeichert werden.
Vielen Dank und viele Grüße
Frank
Re: GPS Daten in MySQL schreiben
Verfasst: Dienstag 20. Mai 2014, 18:46
von /me
Was sind denn deine konkreten Schwierigkeiten? Findest du kein Modul um die Datenbank anzusprechen? Kommst du mit der Dokumentation des Moduls nicht klar? Hast du Probleme mit den SQL-Statements?
Re: GPS Daten in MySQL schreiben
Verfasst: Dienstag 20. Mai 2014, 20:22
von obelixus
/me hat geschrieben:Was sind denn deine konkreten Schwierigkeiten? Findest du kein Modul um die Datenbank anzusprechen? Kommst du mit der Dokumentation des Moduls nicht klar? Hast du Probleme mit den SQL-Statements?
Hmm, also... *lach* Ich muß ja das Datenbankmodul mit importieren
, dann muß ich ja die Verbindung zur Datenbank herstellen
Code: Alles auswählen
con = mdb.connect('localhost', 'testuser', 'test623', 'testdb');
, das läuft ja auch soweit.
Was ich dann gar nicht weiß ist, wie ich mit python alle Daten aus der Tabelle lösche.
Dann kommt ja die Sache mit dem Cursor setzen, das verstehe ich irgendwie nicht.
setzt ja dann den Cursor in die Tabelle, oder?
Wenn bis dahin ja alles richtig ist kommt ja:
Dahinter müßte ich ja dann die Variablen einsetzen. Mein Problem ist nur das das nie funktioniert, und ich da auch immer wieder andere Schreibweisen finde.
Zum Beispiel das hier:
Code: Alles auswählen
cursor.execute("""INSERT INTO Adressen (Name, Strasse, PLZ, Ort) VALUES (%s, %s, %s, %s)"""
Warum sind da so viele ", und normalerweise müßte ich das ja so schreiben, oder? Meine MySQL Tabelle heißt "gps_daten", und die Spalten "lat",lon" und "time". Die Variablen aus dem GPS Script heißen ja orginal "Breitengrad,"Laengengrad" und "Uhrzeit".
Code: Alles auswählen
cursor.execute("""INSERT INTO gps_daten (lat, lon, time) VALUES (Breitengrad, Längengrad, Uhrzeit)"""
Re: GPS Daten in MySQL schreiben
Verfasst: Dienstag 20. Mai 2014, 20:40
von BlackJack
@obelixus: Irgendwelche Texte in literalen Zeichenketten werden nicht auf magische Weise durch den Inhalt von Variablen ersetzt. Letztendlich sollte man das sowieso nicht selber machen, sondern entsprechende Platzhalter für die Werte in die Zeichenkette mit der SQL-Anweisung setzten und dann die Werte der `execute()`-Methode als zweites Argument übergeben. Die Platzhalter bei `MySQLdb` sind '%s'.
Wenn Dich die vielen " wundern, solltest Du ein Grundlagentutorial durcharbeiten. Die verschiedenen Arten Zeichenkettenliterale zu schreiben, sollten dort erwähnt werden.
Der Cursor wird nicht gesetzt, schon gar nicht in eine Tabelle, denn Du gibst da ja gar keine Tabelle an, sondern das ist das Objekt mit dem die Anfragen gestellt werden und das die Ergebnisse liefert. Ob die Datenbank auf der anderen Seite tatsächlich ein Cursor-Konzept kennt, spielt dabei keine Rolle.
Re: GPS Daten in MySQL schreiben
Verfasst: Dienstag 20. Mai 2014, 20:57
von /me
obelixus hat geschrieben:Was ich dann gar nicht weiß ist, wie ich mit python alle Daten aus der Tabelle lösche.
Per SQL entweder mit "
DELETE FROM tabelle WHERE ..." oder mit "
TRUNCATE tabelle". Ich würde die erste Variante vorziehen, da der Datenbankuser dafür nicht so viele Rechte benötigt.
Re: GPS Daten in MySQL schreiben
Verfasst: Freitag 23. Mai 2014, 15:17
von obelixus
BlackJack hat geschrieben:@obelixus:
Wenn Dich die vielen " wundern, solltest Du ein Grundlagentutorial durcharbeiten. Die verschiedenen Arten Zeichenkettenliterale zu schreiben, sollten dort erwähnt werden.
Danke für die Hilfe hier, auch an die anderen vielen Dank das ihr einem Anfänger wie mir schreibt! Ich sollte wohl wirklich mal die Grundlagen durchlesen. Bis jetzt habe ich mir immer ein Skript gesucht das es schon gibt und es durchgelesen und versucht zu verstehen, und dann anzupassen wie ich es brauche. Aber für die Verbindung MySQL und GPS habe ich kein funktionierendes Skript gefunden, und muss nun selbst lernen wie es geht...
Re: GPS Daten in MySQL schreiben
Verfasst: Freitag 23. Mai 2014, 15:19
von obelixus
/me hat geschrieben:obelixus hat geschrieben:Was ich dann gar nicht weiß ist, wie ich mit python alle Daten aus der Tabelle lösche.
Per SQL entweder mit "
DELETE FROM tabelle WHERE ..." oder mit "
TRUNCATE tabelle". Ich würde die erste Variante vorziehen, da der Datenbankuser dafür nicht so viele Rechte benötigt.
Das werde ich dann mal versuchen, aber im Moment hat mein Rad leider keine Internetverbindung, muß da mal nachgucken was da los ist. Und dann berichte ich mal ob ich es hinbekommen habe. Wenn es morgen nicht zu viel regnet tausche ich mal die Simkarten aus, stelle alles ein und dann teste ich nochmal das Skript.
VG
Frank
P.S.: Das Rad für das ich all das hier brauche ist übrigens ein
Python Trike

Re: GPS Daten in MySQL schreiben
Verfasst: Dienstag 3. Juni 2014, 17:10
von obelixus
Hallo,
ich komme einfach nicht klar damit. Ich hänge nun mal das Skript an, vielleicht hat ja einer von euch Zeit und Lust die Stelle an der die Daten in MySQL übertragen werden sollen zu korrigieren. Ich versteh nicht ganz was da falsch ist. Irgendwas mit den Einrückungen???
Danke und viele Grüße
Frank
Code: Alles auswählen
import serial
import time
import datetime
import os
import sys
import MySQLdb as mdb
try:
serial = serial.Serial("/dev/ttyACM0", baudrate=4800)
time.sleep(1)
con = mdb.connect('test', 'test', 'test', 'test');
cur = con.cursor()
except:
print "Error opening serial port."
sys.exit(1)
resp = ""
try:
while True:
Zeichen = 0
# String leeren
Input = ""
# Zeichen empfangen
Zeichen = UART.read()
# Pruefen ob Uebertragung gestartet wurde
if Zeichen == "$":
# Zeichen 2-6 einlesen
for Counter in range(4):
Zeichen = 0
Zeichen = UART.read()
Input = Input + str(Zeichen)
# Pruefen ob das GGA Protokoll gesendet wird
if Input == "GPGG":
# Zeichen empfangen bis ein LF als Abschluss kommt
while Zeichen != "\n":
Zeichen = 0
Zeichen = UART.read()
Input = Input + str(Zeichen)
Input = Input.replace("\r\n", "")
# Datensatz nach jedem "," trennen und in einer Liste speichern
Datenliste = Input.split(",")
# Laenge des Datensatzes feststellen
Laenge = len(Input)
# Uhrzeit herausfiltern
Uhrzeit = Datenliste[1]
time = Uhrzeit[0:2] + ":" + Uhrzeit[2:4] + ":" + Uhrzeit[4:6]
# Laengen und Breitengrad herausfiltern und berechnen
Breitengrad = float(Datenliste[2])
lat = Breitengrad / 100
Laengengrad = float(Datenliste[4])
lon = Laengengrad / 100
cur.execute("INSERT INTO gps_daten (time,lat,lon) VALUES (%s,%s,%s)")
con.commit()
time.sleep(0.5)
resp = ""
finally:
if con:
con.close()
serial.close()
Re: GPS Daten in MySQL schreiben
Verfasst: Dienstag 3. Juni 2014, 18:50
von BlackJack
@obelixus: Bekommst Du denn eine Fehlermeldung bezüglich der Einrückung?
Schreib das gesamte Programm doch mal nicht als einen riesigen Codeklumpen auf Modulebene sondern teil das in kleine in sich geschlossene Funktionen auf, die jeweils eine Aufgabe erledigen. Die kann man dann unabhängig voneinander testen. Das erleichtert die Fehlersuche auch ungemein wenn man weiss was schon funktioniert und was nicht.