Seite 1 von 1

Python und MySQL

Verfasst: Dienstag 22. Februar 2005, 17:54
von Gosh
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?

Verfasst: Dienstag 22. Februar 2005, 18:00
von Leonidas
Wie wärs mit dem MySQL Python Modul und SQL? Wenn du kein SQL magst, kannst du ja noch pSQL nutzen.

Verfasst: Dienstag 22. Februar 2005, 18:09
von Gosh
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 ;)

Verfasst: Dienstag 22. Februar 2005, 18:21
von XT@ngel
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

Verfasst: Samstag 26. Februar 2005, 18:30
von 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?

Verfasst: Samstag 26. Februar 2005, 18:59
von Leonidas
Die Codes hier scheinen schon sehr kurz zu sein.

Verfasst: Samstag 26. Februar 2005, 19:11
von XT@ngel
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

auf elemente des result zugreifen

Verfasst: Freitag 4. März 2005, 10:29
von flyingfish
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.

auf elemente des result zugreifen

Verfasst: Freitag 4. März 2005, 11:01
von flyingfish
sorry, habs aus versehen zweimal eingetragen.

Re: auf elemente des result zugreifen

Verfasst: Freitag 4. März 2005, 13:34
von Leonidas
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))

Re: auf elemente des result zugreifen

Verfasst: Freitag 4. März 2005, 14:24
von XT@ngel
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

Danke

Verfasst: Dienstag 8. März 2005, 09:11
von flyingfish
Danke euch beiden, das werde ich ausprobieren!

flyingfish