Python und MySQL

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Gosh
User
Beiträge: 6
Registriert: Montag 21. Februar 2005, 15:09

Hallo
Also ich habe eine MySQLDatenbank erstellt.
Diese heißt „usr_web17_1“, in der Tabelle "adressen" sind folgende Feldnamen „Id“, „Anrede“, „Name“ und „Vorname“. Da drin sind die Daten wie folgt eingefügt:
Id Anrede Name
1 Herr xyz
2 Herr Bla
3 Herr Test

Wie kann ich diese Daten der Datenbank mit Python in einer HTML Datei als Text ausgeben?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wie wärs mit dem MySQL Python Modul und SQL? Wenn du kein SQL magst, kannst du ja noch pSQL nutzen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Gosh
User
Beiträge: 6
Registriert: Montag 21. Februar 2005, 15:09

MySQL Python hab ich schon auf meinem PC Installiert, aber mit welchen Quellcode gebe ich die Daten aus der Datenbank in eine HTML Datei aus?
Ich mag SQL ;)
XT@ngel
User
Beiträge: 255
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Hi,
Ab jetzt 5 Minuten :D

Code: Alles auswählen

# Mein/Pfad/python.exe

print "Content-Type: text/html"
print 

import cgitb; cgitb.enable()        
import MySQLdb

Connection = MySQLdb.connect(host = DB_Host, user = DB_User, passwd = DB_Passwd, db = "usr_web17_1")
Cursor = Connection.cursor(MySQLdb.cursors.DictCursor)

Connection.begin()  
try:
    Cursor.execute("""SELECT * FROM adressen""")
    Result = Cursor.fetchall()
except:
    # Ich weiss macht man nicht so ;-)  
     Connection.rollback()
     Result = None              
else:
     Connection.commit()

if Result:
    for Entry in Result:
       print """ %s - %s  %s <br />""" % (Entry['Id'], Entry['Andrede'], Entry['Name'])
else:
    print "Keine Eniträge"
habs jetzt nicht getestet...
Aber das ganze nun in eine "richtige" HTML Seite zu bekommen sollte mit http://python.sandtner.org/viewtopic.php?t=2577 kein Problem sein :)

.begin(), .commit() und .rollback() kann man weglassen wenn die DB keine Transaktionen unterstützt. Ist zwar bei einem SELECT unötig, habs aber trotzdem dazu gefrickelt ...

MfG
Andreas
Gast

Kann ich den Quelltext auch so schreiben?

Code: Alles auswählen

Quelltext:
#!/usr/bin/python

print "Content-Type: text/html"
import MySQLdb
Connection = MySQLdb.connect(host = DB_Host, user = DB_User, passwd = DB_Passwd, db = "usr_web17_1") 

Cursor = Connection.cursor
(MySQLdb.cursors.DictCursor)
Connection.begin() 
try: 
    Cursor.execute("""SELECT * FROM adressen""") 
    Result = Cursor. fetch all()
exept:
	print "Kann nicht zur Datenbank verbinden"

if Result: 
    for Entry in Result: 
       print """ %s - %s  %s <br />""" % (Entry['Id'], Entry['Andrede'], Entry['Name']) 
else: 
    print "Keine Einträge"
Also wenn ich ein paar Befehle weglasse? oder funtzt der dann nicht mehr?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Die Codes hier scheinen schon sehr kurz zu sein.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
XT@ngel
User
Beiträge: 255
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Du solltest das behandeln von Fehlern genauer definieren.
Deshalb schrieb ich auch:

Code: Alles auswählen

except:
    # Ich weiss macht man nicht so Wink  
für so eine Fehlerbehandlung würde mir am liebsten jeder zweiter Forum User den Kopf von meinen Schultern haun :D

Code: Alles auswählen

except:
    print "Kann nicht zur Datenbank verbinden" 
Wird hier ganz sicher nicht auftretten, da die Verbindung hier schon aufgebaut ist...
Ein einfaches Except fängt auch alle anderen Fehler ab. z.B Fehler im Query. Somit wäre deine Meldung nicht mehr zutreffend.

Welche Fehler auftreten können sind hier: http://www.python.org/peps/pep-0249.html definiert.

MfG
Andreas
flyingfish
User
Beiträge: 33
Registriert: Sonntag 23. Januar 2005, 23:36

Hallo,

wie macht ihr das ergebnis['id'] euch einen Wert zurueck gibt?
Bei mir geht das nicht, ich kann nur mit dem index also ergebnis[0] zugreifen.

Code: Alles auswählen

 def select_ids(self):
 	c = self.connection.cursor()
 	c.execute("SELECT id from data where id < '100'")
	#make list of all results
	result = c.fetchall()
	for x in result:
		print x[0]
	c.close()


Eine weitere Frage, wenn ich einfach print result mache,
bekomme ich sowas:

Code: Alles auswählen

((1L,), (2L,), (3L,), (4L,), (5L,), (6L,), (7L,), (8L,), (9L,), (10L,), 
(11L,), (12L,), (13L,), (14L,), (15L,), (16L,), (17L,), (18L,), (19L,), (20L,), 
(21L,), (22L,), (23L,), (24L,), (25L,), (26L,), (27L,), (28L,), (29L,), (30L,), 
(31L,), (32L,), (33L,), (34L,), (35L,), (36L,), (37L,), (38L,), (39L,), (40L,), 
(41L,), (42L,), (43L,), (44L,), (45L,), (46L,), (47L,), (48L,), (49L,), (50L,), 
(51L,), (52L,), (53L,), (54L,), (55L,), (56L,), (57L,), (58L,), (59L,), (60L,), 
(61L,), (62L,), (63L,), (64L,), (65L,), (66L,), (67L,), (68L,), (69L,), (70L,), 
(71L,), (72L,), (73L,), (74L,), (75L,), (76L,), (77L,), (78L,), (79L,), (80L,), 
(81L,), (82L,), (83L,), (84L,), (85L,), (86L,), (87L,), (88L,), (89L,), (90L,), 
(91L,), (92L,), (93L,), (94L,), (95L,), (96L,), (97L,), (98L,), (99L,))
Wofuer steht dabei das L? Das Feld ist unsigned int.

Besten Dank,

Rob

Edit (Leonidas): Code in Tags gesetzt, da andernfalls nicht lesbar.
flyingfish
User
Beiträge: 33
Registriert: Sonntag 23. Januar 2005, 23:36

sorry, habs aus versehen zweimal eingetragen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

flyingfish hat geschrieben:Wofuer steht dabei das L? Das Feld ist unsigned int.
L steht für Long.

Code: Alles auswählen

print type(10L)
print type(10)
print type(int(10L))
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
XT@ngel
User
Beiträge: 255
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Hallo.
flyingfish hat geschrieben:wie macht ihr das ergebnis['id'] euch einen Wert zurueck gibt?
Das wurd hier schon sehr oft besprochen:
c = self.connection.cursor(MySQLdb.cursors.DictCursor)

;)

MfG
Andreas
flyingfish
User
Beiträge: 33
Registriert: Sonntag 23. Januar 2005, 23:36

Danke euch beiden, das werde ich ausprobieren!

flyingfish
Antworten