Seite 1 von 1
DatenbankMySQL
Verfasst: Donnerstag 4. Mai 2006, 11:50
von KiS
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?
Verfasst: Donnerstag 4. Mai 2006, 15:39
von Leonidas
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.
Datenbank MySQL update Problem
Verfasst: Donnerstag 11. Mai 2006, 13:53
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
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
Re: Datenbank MySQL update Problem
Verfasst: Donnerstag 11. Mai 2006, 22:25
von BlackJack
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
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.
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
Verfasst: Freitag 12. Mai 2006, 06:38
von KiS
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
Verfasst: Freitag 12. Mai 2006, 15:16
von murph
Code: Alles auswählen
else:
c.execute("""update watchdog
set Status='2'
[color=red]WHERE port"""[/color])
print 'server down'
break
zweimal hast du das gemacht...
eine funktionierende MySQL-Syntax wäre
Das andere sollte nicht funktionieren...
Verfasst: Freitag 12. Mai 2006, 19:12
von KiS
Das heißt, dass ich einfach schreiben kann:
Code: Alles auswählen
else:
c.execute("""update watchdog
set Status='2'
WHERE port = x""")
print 'server down'
break
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?
Verfasst: Freitag 12. Mai 2006, 20:56
von murph
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
Code: Alles auswählen
else:
c.execute("""update watchdog
set Status='2'
WHERE port =%i""" % x)
print 'server down'
break
heißen, da sonst der echt wert (x) angegeben werden würde
Verfasst: Samstag 13. Mai 2006, 07:46
von BlackJack
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üsste
Code: Alles auswählen
else:
c.execute("""update watchdog
set Status='2'
WHERE port =%i""" % x)
print 'server down'
break
heißen, da sonst der echt wert (x) angegeben werden würde
Bitte keine Werte mit '%' in SQL-Anweisungen hineinformatieren sondern das immer das Datenbankmodul machen lassen, das ist sicherer.
@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.
Verfasst: Freitag 8. September 2006, 10:43
von Nirven
BlackJack 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.
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 es
