MySQL-Datenbank

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
KiS
User
Beiträge: 19
Registriert: Samstag 29. April 2006, 07:26

HI Leute :D
Ich hab ein Problem, und zwar kann ich mit Python Daten von meiner MySQL-Datenbank holen und damit dann arbeiten, allerdings möchte ich die gewonnenen Ergebnisse in die Datenbank eintragen. Kann mir wer helfen?

Und noch eine Frage hab ich. Wie funktioniert das mit einer endlos Schleife? :?:
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Hallo,

hier ein kleines Beispiel, wie Daten in eine MySQL-Datenbank geschrieben werden:

Code: Alles auswählen

import MySQLdb

conn = MySQLdb.connect(db='Datenbank')
cursor = conn.cursor()
cursor.execute("""INSERT INTO Tabelle
                      (spalte1,spalte2,spalte3)
                       values('%s','%s','%s')"""%(wert1, wert2, wert3)
Eine Endlosschleife kannst du mit while erzeugen:

Code: Alles auswählen

from time import sleep

while True:
    print 'läuft'
    sleep(1)
Stephan
KiS
User
Beiträge: 19
Registriert: Samstag 29. April 2006, 07:26

Und wie kann ich den wert in eine bestimmte Zeile eintragen?
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Wenn du vorhandene Werte ersetzen möchtest, so geht das mit UPDATE.
Neue Datensätze werden mit INSERT zugefügt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Eigentlich hat das SQL-Zeug mit Python nichts zu tun. Deswegen empfehle ich dir den SQL Course.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Stephan hat geschrieben:

Code: Alles auswählen

import MySQLdb

conn = MySQLdb.connect(db='Datenbank')
cursor = conn.cursor()
cursor.execute("""INSERT INTO Tabelle
                      (spalte1,spalte2,spalte3)
                       values('%s','%s','%s')"""%(wert1, wert2, wert3)
Bitte in der letzten Zeile das Prozentzeichen durch ein Komma ersetzen. Das Einsetzen von Werten in eine SQL Anfrage sollte man dem Datenbankmodul überlassen um "SQL-Injections" zu vermeiden.
KiS
User
Beiträge: 19
Registriert: Samstag 29. April 2006, 07:26

meine tabelle schaut wie folgt aus:
Port Status
1 ?
2 ?
3 ?
4 ?

und ich möchte jetzt nur für den Port 4 zum Beispiel im STatusfeld eine 1 haben wie mach ich das?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

KiS hat geschrieben:und ich möchte jetzt nur für den Port 4 zum Beispiel im STatusfeld eine 1 haben wie mach ich das?
Hi KiS!

Hier die SQL-Anweisung, die den Status auf 1 setzt. Das macht sie mit allen Zeilen in denen die Bedingung ``Port = 4`` zutrifft.

Code: Alles auswählen

UPDATE
    tabellenname
SET
    Status = 1
WHERE
    (Port = 4)
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
KiS
User
Beiträge: 19
Registriert: Samstag 29. April 2006, 07:26

und wie sieht das aus wenn der Port eine Variable ist, die man am Anfang des Programms eingeben muss. Und mit dieser arbeitet man dann weiter?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

KiS hat geschrieben:und wie sieht das aus wenn der Port eine Variable ist, die man am Anfang des Programms eingeben muss.
Gegenfrage: Warum fragst du das inzwischen dreimal?
  1. Hier, in diesem Thread
  2. Hier
  3. Hier
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
KiS
User
Beiträge: 19
Registriert: Samstag 29. April 2006, 07:26

Code: Alles auswählen

import MySQLdb
import os
verbindung=MySQLdb.connect(host='localhost',db='watchdog',user='root',passwd='test')
c=verbindung.cursor()
c.execute('USE watchdog')
anz=c.execute('SELECT * FROM watchdog')
print anz
x=raw_input("Bitte gewünschten Port eingeben:")
print x
anfrage1='''
SELECT Reset
FROM watchdog
WHERE Port='''+x
c.execute(anfrage1)
a=c.fetchone()
print a
while True:
    try:
        if a == ('0',):
            anfrage2='''
            SELECT IP1,IP2,IP3,IP4
            FROM watchdog
            WHERE Port='''+x
            c.execute(anfrage2)
            var1=c.fetchone()[0]
            c.execute(anfrage2)
            var2=c.fetchone()[-3]
            c.execute(anfrage2)
            var3=c.fetchone()[-2]
            c.execute(anfrage2)
            var4=c.fetchone()[-1]
            ip=var1+"."+var2+"."+var3+"."+var4
            print ip
            pi=os.system ("ping "+ip)
            print pi
            if pi == 0:
                c.execute("""UPDATE watchdog
                SET Status = '1'
                WHERE Port="""+x)
                print 'ok' #ping=0
                sleep(2)
            else:
                c.execute("""UPDATE watchdog
                SET Status = '2'
                WHERE Port="""+x)
                print 'server down' #ping=1
                #wenn der Server down ist soll er über die Serielle Schnittstelle neu gestartet werden.
            break
        else:
            c.execute("""UPDATE watchdog
            SET Status = '3', Reset = '0'
            WHERE Port="""+x)
            print 'server neustart'
            break
    except ValueError:
        print "Bitte nochmal eingeben."
folgende Frage: Ich möchte nachdem gepingt wurde möchte ich wieder auf den Anfang zu while True zurück. Nur wie geht das????
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

continue?! Allerdings würd ich dir auch raten das ganze in Funktionen aufzuteilen, denn im Moment ist das ziemlich unübersichtlich.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten