DB LOOKUP fuer automatische Email Response

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
ted88
User
Beiträge: 3
Registriert: Montag 24. Mai 2010, 11:45

Hallo,

ich hoffe mal das ich hier im richtigen Unterforum bin, bin neu hier. :D
Also ich habe ein Problem :mrgreen: ,
derzeit teste ich das automatische Email Response Programm mit dem Namen TurboEmailAnswer, dort will und muss ich mittels SQL und Python auf eine Access Datenbank zugreifen.
Komischerweise hab ich es mit meinem halbwegs guten Wissen in SQL und den quasi nicht vorhandenen Wissen in Python hinbekommen, bereits ein DB Store Script zu schreiben, das Programm bietet schon Vorlagen an welche ich dann nur angepasst habe.
Allerdings funktioniert mein DB Lookup noch nicht, hier mal die Vorlage.

Code: Alles auswählen

info=""
name,eml=api.email.Utils.parseaddr( mail.From )
c=odbc.odbc('test_dsn').cursor()
for i in 1,2,3:
  if i>1: eml=api.GetSimpleInput("E-MailAddress")
  c.execute("SELECT * from customer WHERE E-MailAddress='%(eml)s'" % locals() )
  results=c.fetchall()
  if results:
    info= '
.join([' | '.join(map(str,line)[1:]) for line in results])
    break
Mit diesem Script will ich erreichen, das Kunden, die mir eine Email schreiben und deren Adresse in einer Tabelle steht, automatisch ihren Geraetetatus erhalten.
test_dsn ist der Data Source Name und customer ist die Tabelle wo die Kunden gespeichert werden.
Das Programm zeigt mir aber nun bei der von mir angepassten Vorlage ein Syntax Error bei Zeile 9:
Meldung: EOL while scanning single quoted String.

Ich waere sehr froh wenn ihr Mal ein Auge drueber werfen koenntet und mir sagen wuerdet, was ich machen muss um den DB Lookup funktionsfaehig zu machen.
Schonmal danke im voraus.

mfg
ted88
Zuletzt geändert von Anonymous am Montag 24. Mai 2010, 12:53, insgesamt 1-mal geändert.
Grund: Quelltext in Code-Tags gesetzt.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Du muust Quelltext immer in

Code: Alles auswählen

 Blöcke schreiben; für Python gibts spezielle bzw [code=python]. Ansonsten geht die EInrückung flöten und man erkennt nur schlecht, was das Script tun soll.

Was genau kommt denn als Fehlermeldung? Oder wieso klappt das nicht? (-> Du musst das schon präzise beschreiben! Fehler am besten per Copy/Paste einfügen)

was soll locals() bewirken? Deine Emailadresse steht doch wohl in [b]eml[/b]; also hätte ich diese Angabe dort erwartet.

Generell: Du wirst selber nicht zu Rande kommen, wenn Du die Grundlagen von Python nicht lernen willst / kannst. Einfach so ein Script zu nehmen und das anzupassen wird Dich früher oder später zu Problemen führen, die Du nicht mehr durchschaust.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@ted88: Jetzt mit Syntaxhighlighting sieht man doch relativ deutlich woran es liegt, und eigentlich ist es auch *genau* das was die Fehlermeldung sagt. Du hast die Zeichenketten nicht vernünftig in Anführungszeichen eingeschlossen -- da fehlt mindestens ein. An welcher Stelle und was da noch fehlt, hängt davon ab, was Du erreichen willst.
ted88
User
Beiträge: 3
Registriert: Montag 24. Mai 2010, 11:45

Hallo Hyperion,
danke fuer die schnelle Antwort,

[quote="Hyperion"]Du muust Quelltext immer in

Code: Alles auswählen

 Blöcke schreiben; für Python gibts spezielle bzw [code=python]. Ansonsten geht die EInrückung flöten und man erkennt nur schlecht, was das Script tun soll. [/quote]
Zur Kenntnis genommen, danke fuer den Hinweis.

[quote="Hyperion"] Was genau kommt denn als Fehlermeldung? Oder wieso klappt das nicht? (-> Du musst das schon präzise beschreiben! Fehler am besten per Copy/Paste einfügen) [/quote]
Ich weiss nicht ob der Fehler auch in anderen Python Umgebungen so ausschaut, mein Programm spuckt aber das hier aus:
macro [<A:db lookup>]line11 : EOL while scanning single-quoted string

[quote="Hyperion"] was soll locals() bewirken? Deine Emailadresse steht doch wohl in [b]eml[/b]; also hätte ich diese Angabe dort erwartet.[/quote]
 :K 
[quote="Hyperion"] Generell: Du wirst selber nicht zu Rande kommen, wenn Du die Grundlagen von Python nicht lernen willst / kannst. Einfach so ein Script zu nehmen und das anzupassen wird Dich früher oder später zu Problemen führen, die Du nicht mehr durchschaust.[/quote]

Ja ich weiss, aber aufgrund des Zeitdruckes und der eigenen Faulheit wollte ich mal fragen ob nicht hier jemand helfen kann, du hast aber recht und spaeter fuehrt wahrscheinlich nichts daran vorbei sich zumindestens die Grundlagen anzuschaun, ich hab vor ner halben Ewigkeit schon mit C++ und Java programmiert, ich hoffe mal das hilft, Grundgerueste wie Schleifen und so sind also bekannt.

mfg 
ted88
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Lass Dir doch mal nach Zeile 2 per print eml ausgeben!

In Zeile 9 musst Du zwei "'" stehen haben für ein leeres String Literal.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
ted88
User
Beiträge: 3
Registriert: Montag 24. Mai 2010, 11:45

Hallo Hyperion,
Hyperion hat geschrieben:Lass Dir doch mal nach Zeile 2 per print eml ausgeben!
In Zeile 9 musst Du zwei "'" stehen haben für ein leeres String Literal.
Nochmals danke fuer die Antwort.
eml gibt mir, wie von dir wahrscheinlich erwartet, die vollstaendige Emailadresse aus, somit waere das locals ja dann sinnfrei.
Zur Zeile 9 muss ich sagen, ich hab schon vor dem Forenbesuch einige Sachen probiert die mir von Java bekannt waren, mit Klammer, Anfuehrungszeichen etc.
aber irgendwie kommt dann immer die Meldung eol while single quoted string oder invalid syntax.
Kannst du mir das mit dem zwei " ' " nochmal anhand des von mir oben geposteten Quellcodes zeigen, denn irgendwie stell ich mich zu bloed an, meinst du 2x " ' " oder nur 2x Hochkomma (') , hab schon alle mir einfallenden Kombinationen getestet.
Ich weiss es ist "viel" verlangt und das sind alles nur Grundlagen, aber wenn ich so die Grundkonstruktion habe, kann ich erstmal mit SQL weiterarbeiten, ich werde mich dann demnaechst mal nach einer Python Lektuere umschauen, kann wer was empfehlen?

mfg ted88
BlackJack

@ted88: Programmieren durch ausprobieren bringt einen nicht viel weiter. Versuch's doch mal mit ein wenig überlegen. Methoden werden auf Objekten ausgeführt. Zugegriffen wird mit dem ``.``-Operator. Links vom Punkt steht das Objekt, und rechts davon der Methodenaufruf. Soweit unterscheidet sich das nicht von Java. `join()` ist eine Methode auf Zeichenketten. Was muss dann wohl vor dem ``.join`` stehen? Ein Ausdruck der eine Zeichenkette ergibt. Jetzt schaust Du im Tutorial einfach mal nach wie man in Python Zeichenketten schreiben kann. Kleiner Tipp: ein einzelnes Anführungszeichen -- weder einfach noch doppelt -- reicht nicht aus um eine literale Zeichenkette zu schreiben.

Und dann könntest Du auch die Dokumentation von `str.join()` mal lesen, und ein wenig in einer Python-Shell herumprobieren um zu verstehen was da passiert.
Antworten