Seite 1 von 1
mysql datenbankabfrage mit dictionary
Verfasst: Dienstag 23. August 2011, 17:19
von The Hit-Man
Ich versuche gerade eine mysql-abfrage zu starten und zwar sieht das ganze so aus:
Code: Alles auswählen
# benutzer id holen
def getBenutzerId ():
config = ConfigParser.RawConfigParser()
conf = os.environ['HOME'] + "/.mydb/mydb.cfg"
config.read (conf)
data = {
"benutzer" : config.get('mydb', 'benutzer'),
"passwort" : config.get('mydb', 'passwort')
}
conn = opendb ()
cursor = conn.cursor()
cursor.execute("""SELECT * FROM benutzer where benutzer = ':benutzer'""", data)
benutzer_id = cursor.fetchall ()
cursor.close ()
return (benutzer_id)
Ich bekomme keine Fehlermeldung, also connecten funktioniert. Ich bekomme nur keinen Datensatz zurück, obwohl ich einen zurück bekommen müßte. Das komische daran ist, das der gleiche Syntax mit sqlite geht. Hat jemand ne Ahnung, wie das unter mysql gemacht wird? Ich habe so das Gefühl, das er in dem sql Syntax nicht die Variable benutzer nimmt, sondern eben das ganze Wort, denn dann ist auch klar, das ich keinen Datensatz zurück bekomme. Ich würde eben gerne nen Dictionary für meine Abfragen benutzen ( hatte mich jetzt von sqlite so dran gewöhnt ).
Kann mir da jemand schnell auf die Spünge helfen?
Re: mysql datenbankabfrage mit dictionary
Verfasst: Dienstag 23. August 2011, 17:51
von The Hit-Man
so, scheint es zu gehen
Code: Alles auswählen
cursor.execute("""SELECT * FROM benutzer where benutzer = (%(benutzer)s)""", data)
Ich frage mich nur immer, wo man solche Infos schnell her bekommt. Da muß man ja super lange für googlen.
Re: mysql datenbankabfrage mit dictionary
Verfasst: Dienstag 23. August 2011, 17:53
von Hyperion
Die DB-API 2.0 erwartet bei prepared statements aber doch ein Tupel! Ich bezweifel irgend wie, dass das mit SQLite gehen sollte. Zudem wird dort doch ein Parameter mit `?foo` Notation dargestellt, iirc?
Wenn Du nur ein Tupel als Ergebnis erwartest, solltest Du `cursor.fetchone()` nehmen. So wäre der Name auch verwirrend, da in `benutzer_id` kein einzelner Datensatz drin steht, sondern ein Iterable.
Re: mysql datenbankabfrage mit dictionary
Verfasst: Dienstag 23. August 2011, 19:41
von noisefloor
Hallo,
Hyperion hat geschrieben:Die DB-API 2.0 erwartet bei prepared statements aber doch ein Tupel!
Also AFAIK (und ich bin mir ziemlich sicher

) braucht man kein Tuple, wenn man nur ein Paramter hat.
Ich bezweifel irgend wie, dass das mit SQLite gehen sollte. Zudem wird dort doch ein Parameter mit `?foo` Notation dargestellt, iirc?
Vielleicht ist das Python-SQLite Modul da flexibler... MySQLdb ist da ziemlich unflexibel, weil nur die %s Notation geht.
@The Hit-Man: Warum nimmst du denn
statt
???
Außerdem vergisst du in deinem Beispiel, die Connection zu schließen.
Gruß, noisefloor
Re: mysql datenbankabfrage mit dictionary
Verfasst: Dienstag 23. August 2011, 20:31
von BlackJack
@Hyperion: Die Parameter können auch eine Abbildung sein:
PEP 294 — Python Database API Specification v2.0 hat geschrieben:.execute(operation[,parameters])
Prepare and execute a database operation (query or
command). Parameters may be provided as sequence or
mapping and will be bound to variables in the operation.
Variables are specified in a database-specific notation
(see the module's paramstyle attribute for details). [5]
Macht ja auch irgendwie Sinn wenn es die Möglichkeit gibt benannte Platzhalter zu verwenden.
@The Hit-Man: Ich würde ja SQLAlchemy für die Datenbankanbindung verwenden. Dann muss man sich nicht so mit den Unterschieden in SQL-Dialekten und Datenbankmodulen herum schlagen.
Re: mysql datenbankabfrage mit dictionary
Verfasst: Dienstag 23. August 2011, 20:46
von noisefloor
Hallo,
Ich würde ja SQLAlchemy für die Datenbankanbindung verwenden. Dann muss man sich nicht so mit den Unterschieden in SQL-Dialekten und Datenbankmodulen herum schlagen.
+1
Gruß, noisefloor
Re: mysql datenbankabfrage mit dictionary
Verfasst: Dienstag 23. August 2011, 21:12
von Hyperion
@BlackJack: Ah, danke. Zu lange her, dass ich mal direkt gegen das API programmiert habe
Daher auch +1 für einen ORM. (Ich würde da ja zu Elixir raten

)
Re: mysql datenbankabfrage mit dictionary
Verfasst: Dienstag 23. August 2011, 21:25
von BlackJack
@Hyperion: Ich meinte SA nicht einmal unbedingt als ORM. Auch normales SQL lässt sich damit schön abbilden. Wobei ORM natürlich auch schick ist.