Seite 1 von 1

MySQL-Datenbank

Verfasst: Samstag 29. April 2006, 07:31
von KiS
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? :?:

Verfasst: Samstag 29. April 2006, 08:27
von Mawilo
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

Verfasst: Samstag 29. April 2006, 08:52
von KiS
Und wie kann ich den wert in eine bestimmte Zeile eintragen?

Verfasst: Samstag 29. April 2006, 09:05
von Mawilo
Wenn du vorhandene Werte ersetzen möchtest, so geht das mit UPDATE.
Neue Datensätze werden mit INSERT zugefügt.

Verfasst: Samstag 29. April 2006, 10:36
von Leonidas
Eigentlich hat das SQL-Zeug mit Python nichts zu tun. Deswegen empfehle ich dir den SQL Course.

Verfasst: Samstag 29. April 2006, 23:02
von 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.

Datenbank MySQL

Verfasst: Donnerstag 4. Mai 2006, 08:22
von KiS
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?

Re: Datenbank MySQL

Verfasst: Donnerstag 4. Mai 2006, 09:01
von gerold
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
:-)

Datenbank MySQL

Verfasst: Donnerstag 4. Mai 2006, 09:44
von KiS
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?

Re: Datenbank MySQL

Verfasst: Donnerstag 4. Mai 2006, 15:55
von Leonidas
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

Verfasst: Montag 22. Mai 2006, 11:02
von KiS

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????

Verfasst: Montag 22. Mai 2006, 13:30
von Leonidas
continue?! Allerdings würd ich dir auch raten das ganze in Funktionen aufzuteilen, denn im Moment ist das ziemlich unübersichtlich.