Mehrere Argumente übergeben String %s

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.
Antworten
Benutzeravatar
martinjo
User
Beiträge: 189
Registriert: Dienstag 14. Juni 2011, 20:03

Wie ersetze ich mehrere Positionen in einem String mit Variablen?

Hier mal mein bisheriger Pfusch, suche seit über 20 Minuten nach einer Lösung.... ^^

Code: Alles auswählen

cursor = mysql.cursor()
cursor.execute("SELECT * FROM `orders` WHERE `orders_id` > %s", last_imported_sale)
orders = cursor.fetchall()
for i in orders:
    print "New order from: %s at %s" % i[8] % i[54]
Habt ihr mir einen erleuchtenden Hinweis?

THX
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Code: Alles auswählen

print "New order from: %s at %s" % (i[8] , i[54])
"i" solltest du allerdings noch einen richtigen Namen geben und für die Indizes Konstanten verwenden. Allerdings bekomme ich Angst, wenn ich eine Spalte mit dem Index 54 sehe.
Das Leben ist wie ein Tennisball.
Benutzeravatar
noisefloor
User
Beiträge: 4261
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
martinjo hat geschrieben:Wie ersetze ich mehrere Positionen in einem String mit Variablen?
Welchen String meinst du denn? Das SELECT-Statement?

Dann:

Code: Alles auswählen

cursor.execute("SELECT * FROM foo WHERE spam > %s AND egg = %s", (wert1, wert2)) 
(Wenn ich Syntax richtig im Kopf habe...).

Wenn deine Tabelle aber wirklich 54 Spalten hat, dann solltest du mal über eine Optierung der Tabellenstruktur nachdenken. ;-)

Gruß, noisefloor
Benutzeravatar
martinjo
User
Beiträge: 189
Registriert: Dienstag 14. Juni 2011, 20:03

print "New order from: %s at %s" % (i[8] , i[54])
Danke, funktioniert. Die anderen Tipps werde ich mir auch zu Herzen nehmen.

Ist übrigens die orders-Tabelle aus einer XTC-Webshop.
BlackJack

@martinjo: Ein ``SELECT *`` wird üblicherweise als schlechter Stil angesehen. Da kann man zum einen mehr Spalten selektieren als man haben möchte — selbst wenn man zu dem Zeitpunkt an dem man das geschrieben hat, wirklich alle haben möchte, es können ja im Laufe der Zeit noch Spalten hinzu kommen. Zum anderen geht man von einer Reihenfolge der Spalten aus, die sich ebenfalls mal ändern könnte, und dann darf man überall im Programm nach diesen Sternchen-Selektionen suchen und nachverfolgen wo die Ergebnisse verwendet werden um dort die Indizes anzupassen.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

@martinjo:
Nur mal so als Warnhinweis - Du lässt zwar derzeit nur Einträge der orders-Tabelle ausgeben, allerdings weckt sowas mitunter Begehrlichkeiten auf Shopbetreiberseite. Beim Rummanipulieren an Bestellungen ist äusserste Vorsicht geboten, spätestes bei Umgereimheiten der Rechnungsnummern steht das Finanzamt vor der Tür. Nicht ohne Grund verbieten die meisten Shopsysteme das Löschen von Bestellungen und erlauben nur das Stornieren ;)
Antworten