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
GPS Daten in MySQL schreiben
Hmm, also... *lach* Ich muß ja das Datenbankmodul mit importieren/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?
Code: Alles auswählen
import MySQLdb
Code: Alles auswählen
con = mdb.connect('localhost', 'testuser', 'test623', 'testdb');
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.
Code: Alles auswählen
cur = con.cursor()
Wenn bis dahin ja alles richtig ist kommt ja:
Code: Alles auswählen
cur.execute("INSERT INTO Testtabelle
Zum Beispiel das hier:
Code: Alles auswählen
cursor.execute("""INSERT INTO Adressen (Name, Strasse, PLZ, Ort) VALUES (%s, %s, %s, %s)"""
Code: Alles auswählen
cursor.execute("""INSERT INTO gps_daten (lat, lon, time) VALUES (Breitengrad, Längengrad, Uhrzeit)"""
@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.
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.
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...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.
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./me hat geschrieben: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.obelixus hat geschrieben:Was ich dann gar nicht weiß ist, wie ich mit python alle Daten aus der Tabelle lösche.
VG
Frank
P.S.: Das Rad für das ich all das hier brauche ist übrigens ein Python Trike
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
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()
@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.
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.