Seite 1 von 1
Python+MySQL
Verfasst: Dienstag 16. Mai 2006, 08:13
von Franzi
Hey!
Ich hab da ,mal ne frage wie kann ich denn mysql datenbanken in python verwenden, also ich meine wie ich in python eingegebene daten in einer datenbank speichern kann??
vielen dank für eure hilfe!
Verfasst: Dienstag 16. Mai 2006, 08:56
von Masaru
Gib mehrere Möglichkeiten, von Command-Line tool parsen, über ODBC bis hin zu Bibliotheken wie
MySQL for Python (DBAPI 2.0 supported).
Aber, mal etwas anderes .... hast du schonmal die
Suchen-Funktion hier vom Forum benutzt? Da bekommst du dutzende Threads über MySQL

.
Verfasst: Mittwoch 17. Mai 2006, 09:36
von JanDMC
glaube das wird dir alles erklären
mfg Jan
Code: Alles auswählen
import MySQLdb
DROP = "DROP TABLE IF EXISTS tabelle"
CREATE = """CREATE TABLE tabelle (
item_id int auto_increment primary key,
bestellungen int,
menge int,
bestand int
lagerkosten int,
bestellkosten int,
gesamtkosten int
)"""
INSERT1 = "INSERT INTO tabelle VALUES (NULL,'10','16', '34','10','16', '34')"
SELECT = "SELECT * FROM tabelle"
# das Hauptprogramm
if (__name__ == '__main__'):
myconn = MySQLdb.connect(host = ip, user =benutzer , passwd = password, db = datenbank) # mit der Datenbank verbinden
cursor = myconn.cursor()
# cursor.execute(DROP) # Tabelle loeschen
cursor.execute(CREATE) # Tabelle erzeugen
cursor.execute(INSERT1) # 4 Eintraege vornehmen
cursor.execute(INSERT2)
cursor.execute(INSERT3)
cursor.execute(INSERT4)
cursor.execute(SELECT) # Datensaetze anzeigen
while True:
satz = cursor.fetchone() # eine Zeile aus der Ergebnismenge
if not satz: break
for kette in satz: # in Komponenten zerlegen
print kette, '\t ', # KEIN Zeilenvorschub
print # naechste Zeile, d.h. NUR Zeilenvorschub
cursor.execute(UPDATE) # Preise um 10 % anheben
print
cursor.execute(SELECT) # Datensaetze anzeigen
while True:
satz = cursor.fetchone() # eine Zeile aus der Ergebnismenge
if not satz: break
for kette in satz: # in Komponenten zerlegen
print kette, '\t ', # KEIN Zeilenvorschub
print # naechste Zeile, d.h. NUR Zeilenvorschub
cursor.close() # housekeeping
myconn.close()
Verfasst: Mittwoch 17. Mai 2006, 10:12
von jens
Ich würde statt while und fetchone ehr for line in fetchall machen... Es sei denn es sind super viele Ergebnisse...
Verfasst: Mittwoch 17. Mai 2006, 11:57
von gerold
Hi!
Und hier die feine, englische Art
Code: Alles auswählen
for row in iter(cursor.fetchone, None):
for column in row:
print column
Auch bei vielen Zeilen performant und trotzdem einfach umzusetzen.
lg
Gerold
EDIT: Klammern entfernt. Damit das niemand falsch abschreibt.
Verfasst: Mittwoch 17. Mai 2006, 14:40
von Franzi
Vielen Dank leute!
hatte auch schon mal bei suchen nachgeguckt aber auf anhinb nicht das richtige gefunden...

hab es bis jetzt auch immer so gemacht, aber sagt mal, mit variablen geht das nicht oder?das klappt nämlich irgendwie nicht

dass jemand außerhab des quelltextes mit tkinter einen neuen eintrag macht oder etwas löscht?

Na gutti also danke nochmal
Verfasst: Mittwoch 17. Mai 2006, 15:15
von keppla
aber sagt mal, mit variablen geht das nicht oder?das klappt nämlich irgendwie nicht
Ähh, wie meinen? Was soll mit Variablen nicht gehen? meinst du vielleicht prepared statements?
dass jemand außerhab des quelltextes mit tkinter einen neuen eintrag macht oder etwas löscht?
Auch diese Frage ist nicht direkt klar. Ich versuchs mal, so zu beantworten:
Es ist imho egal, was für weitere Bibliotheken (z.B. tkinter) du sonst noch nutzt. Einträge machen oder löschen kann jeder, der an die Datenbank rankommt und authentifiziert wird.
Wie derjenige an die Datenbank kommt (z.B. per "$mysql -u root -p") spielt dabei keine Rolle.
Verfasst: Mittwoch 17. Mai 2006, 15:19
von mitsuhiko
gerold hat geschrieben:Code: Alles auswählen
for row in iter(cursor.fetchone(), None):
for column in row:
print column
Auch bei vielen Zeilen performant und trotzdem einfach umzusetzen.
Eher so:
Code: Alles auswählen
EMPTY_RESULT = ()
for row in iter(cursor.fetchone, EMPTY_RESULT):
for column in row:
print column
Verfasst: Mittwoch 17. Mai 2006, 15:39
von gerold
blackbird hat geschrieben:Code: Alles auswählen
EMPTY_RESULT = ()
for row in iter(cursor.fetchone, EMPTY_RESULT):
for column in row:
print column
Hi blackbird!
Natürlich - das mit den Klammern war schlampig, aber None geht OK.
mfg
Gerold

Verfasst: Mittwoch 17. Mai 2006, 15:43
von mitsuhiko
gerold hat geschrieben:Natürlich - das mit den Klammern war schlampig, aber None geht OK.
Da war ich mir jetzt nicht mehr sicher. Könnte schören leere results werden durch ein leeres Tupel repräsentiert. Da kann ich mich jetzt aber irren.