Hab ich doch geschrieben - lies doch mal mein letztes Posting.CrackPod hat geschrieben:Und wie sieht das mit set() aus? was macht das? Ich komm mit englischen Dokumentationen von Programmiersprachen überhaupt nich klar - zu kompliziert
Adressdatenbank
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Tut mir leid, den hab ich übersehen.Leonidas hat geschrieben:Hab ich doch geschrieben - lies doch mal mein letztes Posting.CrackPod hat geschrieben:Und wie sieht das mit set() aus? was macht das? Ich komm mit englischen Dokumentationen von Programmiersprachen überhaupt nich klar - zu kompliziert
Danke,
Greetz
Ich habe jetzt mal deinen Code hergenommen (und soweit eigentlich auch verstanden). Nur, was ich noch nich versteh is, wie ich in der Liste der Datenbankspalten suchen kann. Das mit der Forschleifen geht nicht:
Greetz
Code: Alles auswählen
#------------------------------------------------------------
def match(self, row):
return dict((name, row[name]) for name in (self.dbCols))
#------------------------------------------------------------
def get(self, args, getall = False):
'''Suche nach Kontakten
:param args: Dictionary für die Suche. Keys sind die Spalten, in denen gesucht wird; Values die Werte für die Spalten.
'''
#Erstellt den SQL-Befehl und erstellt die WHERE-Klausel wobei - falls mehrere Argumente angegeben worden sind - diese mit einem AND verknüpft werden
sql = '''SELECT %s FROM addresses''' % ', '.join(self.dbCols)
self.cur.execute(sql)
adresses = map(self.match, self.cur)
return adresses
Fazit: Nunja, die Suche geht nicht Oder hab ich beim übernehmen nur einen Fehler gemacht? Allerdings kann ich mir nicht so ganz vorstellen, dass man einfach so eine Liste übergeben kann, in der dann gesucht wird, ich mein, die Liste der Spalten hat ja keinen Suchwert?!(wenn ihr jetzt versteht, was ich mein)---------------Code: Alles auswählen
foo = adr.get({'vorname':'Max','nachname':'Musterman'}) for col in foo: for key, val in col.items(): print key,'==>',val
Datensatz nummer: 1
mobilnummer ==> 01701234586
land ==> Deutschland
zuname ==> Maximilian
ort ==> Musterstadt
anrede ==> Herr
adresse ==> Musterstr 12
plz ==> 1234865
bueronummer ==>
id ==> 1
email ==> max.musterman@muster.de
privatfaxnummer ==>
nachname ==> Musterman
buerofaxnummer ==>
privatnummer ==> 004912326548
vorname ==> Max
---------------
Datensatz nummer: 2
mobilnummer ==> 01701234586
land ==> Deutschland
zuname ==> Maximilian
ort ==> Musterstadt
anrede ==> Herr
adresse ==> Musterstr 12
plz ==> 1234865
bueronummer ==>
id ==> 2
email ==> max.musterman@muster.de
privatfaxnummer ==>
nachname ==> Musterman
buerofaxnummer ==>
privatnummer ==> 004912326548
vorname ==> Max II.
---------------
Datensatz nummer: 3
mobilnummer ==> 01701234586
land ==> Kino
zuname ==> Umzumzumz
ort ==> Polar
anrede ==> aus der
adresse ==> Eisstr 12
plz ==> 1234865
bueronummer ==>
id ==> 3
email ==> murmel.aus_dem-eis@kalterPolar.de
privatfaxnummer ==>
nachname ==> Murmel
buerofaxnummer ==>
privatnummer ==> 004912326548
vorname ==> schubdidub
Greetz
Ich verstehe die Frage nicht ganz. Du suchst ja auch nirgends, jedenfalls nicht in den Quelltextschnipseln, die Du eben angegeben hast.
Da steht zwar ein Kommentar bei der SQL Zeichenkette über eine ``WHERE`` Klausel, aber die steht da nirgends!?
Da steht zwar ein Kommentar bei der SQL Zeichenkette über eine ``WHERE`` Klausel, aber die steht da nirgends!?
Also ich hab das ganze jetz nochma genau angeschaut und wieder ein wenig mehr verstanden
So sieht der ganze Spaß bis jetz aus:
Aufruf:
Funktioniert auch eigentlich Super... Nur: Wenn ich map benutze: Wie kann ich bei match() noch einen Parameter übergeben?! Also den, damit ich einen String für die Suche angeben kann?
Stelle:
Ich weiß nicht, wie ich das machen kann...
Fazit: Z.Z. ist es kackegal, ob ich bei adr.get() daten übergebe oder nicht -.- Es wird eh nur der Datensatz von Max rausgesucht :'(
So sieht der ganze Spaß bis jetz aus:
Code: Alles auswählen
#------------------------------------------------------------
def match(self, row):
data = dict((name, row[name]) for name in (self.dbCols))
if 'Max' in data.values():
return data
#------------------------------------------------------------
def get(self, args, getall = False):
'''Suche nach Kontakten
:param args: Dictionary für die Suche. Keys sind die Spalten, in denen gesucht wird; Values die Werte für die Spalten.
'''
#Erstellt den SQL-Befehl und erstellt die WHERE-Klausel wobei - falls mehrere Argumente angegeben worden sind - diese mit einem AND verknüpft werden
sql = '''SELECT %s FROM addresses''' % ', '.join(self.dbCols)
self.cur.execute(sql)
adresses = map(self.match, self.cur)
self.out(adresses)
Code: Alles auswählen
adr.add('Max','Maximilian','Musterman','Herr','Musterstr 12',
'1234865','Musterstadt','Deutschland','004912326548','',
'01701234586','','','max.musterman@muster.de')
adr.add('Max II.','Maximilian','Musterman','Herr','Musterstr 12',
'1234865','Musterstadt','Deutschland','004912326548','',
'01701234586','','','max.musterman@muster.de')
adr.add('schubdidub','Umzumzumz','Murmel','aus der','Eisstr 12',
'1234865','Polar','Kino','004912326548','','01701234586','','',
'murmel.aus_dem-eis@kalterPolar.de')
adr.get({'nachname':'Musterman',})
Stelle:
Code: Alles auswählen
#------------------------------------------------------------
def match(self, row):
data = dict((name, row[name]) for name in (self.dbCols))
if 'Max' in data.values(): # 'Max' <-- muss ersetzt werden - Aber wie?
return data
Fazit: Z.Z. ist es kackegal, ob ich bei adr.get() daten übergebe oder nicht -.- Es wird eh nur der Datensatz von Max rausgesucht :'(
Der Name `match` ist sehr ungünstig. Die Funktion ist nur dazu da um aus einem DictCursor Ergebnis ein echtes `dict` zu machen. Wenn die Bedingung ('Max') nicht zutrifft, dann gibt die Funktion `None` zurück.
Warum bastelst Du die Abfrage nicht schon in die SQL-Anweisung? Dann kümmert sich schon die Datenbank darum.
Warum bastelst Du die Abfrage nicht schon in die SQL-Anweisung? Dann kümmert sich schon die Datenbank darum.
also doch mit einer WHERE Klausel?!
Von der hast du mir abgeraten; wegen SQL Injections - kann ich auch verstehen, nur wusst ich nich, wie ich die umgehen soll.
Im selben Posting haste dann diese row_to_dict Funktion gepostet, deswegen hab ich mir gedacht: Fein, dann hol ich alles, übergeb das der map und die sucht mir dann raus, welche Datensätze zutreffen...
Mittlerweile is mir aufgefallen, warum du mir die Funktion gezeigt hast ^^
Damit die While Schleifen wegkommen - ich habs nur falsch interpretiert
Ja gut, aber wie soll ich das dann machen, damit ich den Injections aus dem Weg geh?
Von der hast du mir abgeraten; wegen SQL Injections - kann ich auch verstehen, nur wusst ich nich, wie ich die umgehen soll.
Im selben Posting haste dann diese row_to_dict Funktion gepostet, deswegen hab ich mir gedacht: Fein, dann hol ich alles, übergeb das der map und die sucht mir dann raus, welche Datensätze zutreffen...
Mittlerweile is mir aufgefallen, warum du mir die Funktion gezeigt hast ^^
Damit die While Schleifen wegkommen - ich habs nur falsch interpretiert
Ja gut, aber wie soll ich das dann machen, damit ich den Injections aus dem Weg geh?
Einfach das einsetzen der Werte dem Datenbankmodul überlassen. Schau Dir die Doku zur `execute()` Methode und dem zweiten Parameter an.
Kannst du mir pls den Link zur Doku geben? Ich find die irgendwie nichtBlackJack hat geschrieben:Einfach das einsetzen der Werte dem Datenbankmodul überlassen. Schau Dir die Doku zur `execute()` Methode und dem zweiten Parameter an.
Greetz
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi CrackPod!CrackPod hat geschrieben:Link zur Doku
http://docs.python.org/dev/lib/sqlite3- ... jects.html
http://www.python.org/dev/peps/pep-0249/
lg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.