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.
Benutzeravatar
Gosh
User
Beiträge: 6
Registriert: Montag 21. Februar 2005, 15:09

Python und MySQL

Beitragvon Gosh » Dienstag 22. Februar 2005, 17:54

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?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 22. Februar 2005, 18:00

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 Modvoice
Benutzeravatar
Gosh
User
Beiträge: 6
Registriert: Montag 21. Februar 2005, 15:09

Beitragvon Gosh » Dienstag 22. Februar 2005, 18: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: 256
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Beitragvon XT@ngel » Dienstag 22. Februar 2005, 18:21

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

Beitragvon Gast » Samstag 26. Februar 2005, 18:30

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?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Samstag 26. Februar 2005, 18:59

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

Beitragvon XT@ngel » Samstag 26. Februar 2005, 19:11

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

auf elemente des result zugreifen

Beitragvon flyingfish » Freitag 4. März 2005, 10:29

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

auf elemente des result zugreifen

Beitragvon flyingfish » Freitag 4. März 2005, 11:01

sorry, habs aus versehen zweimal eingetragen.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: auf elemente des result zugreifen

Beitragvon Leonidas » Freitag 4. März 2005, 13:34

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 Modvoice
XT@ngel
User
Beiträge: 256
Registriert: Dienstag 6. August 2002, 14:36
Kontaktdaten:

Re: auf elemente des result zugreifen

Beitragvon XT@ngel » Freitag 4. März 2005, 14:24

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

Beitragvon flyingfish » Dienstag 8. März 2005, 09:11

Danke euch beiden, das werde ich ausprobieren!

flyingfish

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder