Frage ich hab folgende tabelle:
Port Status
1 ?
2 ?
3 ?
4 ?
die Zahlen vom Port werden am Anfang des Programms abgefragt, also man kann eine Zahl für einen Port eingeben und diese wird dann das ganze Programm über verwendet. Meine Frage ist also wie kann ich die Zahl welche ich ganz am Anfang abgefragt habe (ist eine Variable) bekommen weil ich möchte mit der Funktion
Update tabelle
set Status='1'
where port=variable??????
die '1' ins Statusfeld bei dem dazugehörigen port eintragen. Vorsicht aber der Port ist eine Variable.
Also bitte kann mir wer helfen?
DatenbankMySQL
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Die Zahl findest du in der Variable in der du sie abgespeichert hast.
FIndest du die Antwort nicht hilfreich? Kein Wunder, deine Frage ist ungenau. Wäre nett, wenn du Code posten könntest, dann sehen wir woran es hapert.
FIndest du die Antwort nicht hilfreich? Kein Wunder, deine Frage ist ungenau. Wäre nett, wenn du Code posten könntest, dann sehen wir woran es hapert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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
c=os.system ("ping "+ip)
print c
if c == 0:
'update watchdog'
set
Status='1'
'where port=x'
print x
print 'ok'
else:
c.execute("""update watchdog
set Status='2'
WHERE port""")
print 'server down'
break
else:
c.execute("""update watchdog
set Status='3'
WHERE port""")
print 'server neustart'
break
except ValueError:
print "Bitte nochmal eingeben"
so das ist mein Text kann mir jetzt wer helfen???
Edit by Gerold: BITTE Code immer in Code-Tags einschließen. Python ist sonst nicht lesbar. --> http://www.python-forum.de/faq.php#21
Das sieht sehr, äh, interessant aus. Die selbe Anfrage die vier Werte aus der DB holt viermal auszuführen um dann jedesmal nur *einen* aller vier Werte aus dem Ergebnis zu holen und dann auch noch ab dem zweiten Wert von hinten her indexiert ist echt kreativ.KiS hat geschrieben:Code: Alles auswählen
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

Probier' doch mal, ob Du es auch so schreiben könntest:
Code: Alles auswählen
c.execute('SELECT ip1, ip2, ip3, ip4'
' FROM watchdog'
' WHERE port=%s', x)
ip = '.'.join(c.fetchone())
print ip
Danke ich werds dann gleich mal ausprobieren und dir zurückschreiben ob es funktioniert hat. Kannst du mir vielleicht auch bei dem Problem helfen. Weil ich möchte dann noch wenn der ping erfolgreich ausgeführt wurde in die Datenbank, in die Tabelle watchdog, in die Spalte Status einen bestimmten Statuswert (1,2 oder 3) eintragen. Aber irgendwie passiert überhaupt nichts. Kannst du mir da vielleicht weiter helfen?
Code: Alles auswählen
if a == ('0',):
c.execute('SELECT ip1, ip2, ip3, ip4'
' FROM watchdog'
' WHERE port=%s', x)
ip = '.'.join(c.fetchone())
print ip
if c == 0:
'update watchdog'
set
Status='1'
'where port=x'
print x
print 'ok'
else:
c.execute("""update watchdog
set Status='2'
WHERE port""")
print 'server down'
break
else:
c.execute("""update watchdog
set Status='3'
WHERE port""")
print 'server neustart'
break
Code: Alles auswählen
else:
c.execute("""update watchdog
set Status='2'
[color=red]WHERE port"""[/color])
print 'server down'
break
eine funktionierende MySQL-Syntax wäre
Code: Alles auswählen
WHERE Port = port
Das heißt, dass ich einfach schreiben kann:
x ist ja ne variable. Am Anfang des Programms frag ich ja nach dem Port und der wird mit der Variablen x ausgegeben. kann ich das was du gesagt hast mit port=port so schreiben wie ichs grad geschrieben habe mit where port = x???? geht das?
Code: Alles auswählen
else:
c.execute("""update watchdog
set Status='2'
WHERE port = x""")
print 'server down'
break
ja, das ist richtig...habe leider deine definition übersehen und einfach meine üblcihe genommen...aber da fällt mir auf: das wäre keine variable, es müsste
heißen, da sonst der echt wert (x) angegeben werden würde
Code: Alles auswählen
else:
c.execute("""update watchdog
set Status='2'
WHERE port =%i""" % x)
print 'server down'
break
Bitte keine Werte mit '%' in SQL-Anweisungen hineinformatieren sondern das immer das Datenbankmodul machen lassen, das ist sicherer.murph hat geschrieben:ja, das ist richtig...habe leider deine definition übersehen und einfach meine üblcihe genommen...aber da fällt mir auf: das wäre keine variable, es müssteheißen, da sonst der echt wert (x) angegeben werden würdeCode: Alles auswählen
else: c.execute("""update watchdog set Status='2' WHERE port =%i""" % x) print 'server down' break
@Kis: Bitte schau Dir doch nochmal meine Abfrage an, da wird ja auch eine Variable in die Abfrage eingesetzt.
Und Du darfst natürlich nicht den `commit()` Aufruf auf dem Connection-Objekt nach Änderungen in der Datenbank vergessen, damit die auch wirklich wirksam werden. Oder am Anfang einmal mit `autocommit()` dafür sorgen das Änderungen immer sofort ausgeführt werden.
Oh man, danke. Da meine SELECTs immer so ausgeführt wurden, bin ich nicht auf die Idee gekommen das es bei einem INSERT noch ein commit braucht. War schon kurz vorm verzweifeln weil in der DB nie was drinstand... eine Zeile mehr, und auf einmal funktioniert esBlackJack hat geschrieben:Und Du darfst natürlich nicht den `commit()` Aufruf auf dem Connection-Objekt nach Änderungen in der Datenbank vergessen, damit die auch wirklich wirksam werden. Oder am Anfang einmal mit `autocommit()` dafür sorgen das Änderungen immer sofort ausgeführt werden.
