Und wieder eins: Newsletter Prog

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.
Glamdring
User
Beiträge: 104
Registriert: Sonntag 25. Mai 2003, 20:22
Wohnort: Freiburg i.B.
Kontaktdaten:

1. @ Voges: hattest recht, ändert nix

2. @ Dookie:
Meine MySQL Tabelle:
1. ID int not null
2. Name varchar(255)
3. Adresse varchar(255)
und 4. mail varchar(255)
Dies ist ein Platzhalter, er steht am Ende jeder meiner Beiträge! Erst wenn ich einen vernünftigen Text gefunden habe wird sich das ändern!
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

versuchs mal so:

Code: Alles auswählen

values = "INSERT INTO adressen VALUES(`%s`, `%s`, `%s`, `%s`);" %(y[-4], y[-3],y[-2], y[-1])
Dookie
Glamdring
User
Beiträge: 104
Registriert: Sonntag 25. Mai 2003, 20:22
Wohnort: Freiburg i.B.
Kontaktdaten:

@ Dookie immer noch der selbe Fehler ??????????
Dies ist ein Platzhalter, er steht am Ende jeder meiner Beiträge! Erst wenn ich einen vernünftigen Text gefunden habe wird sich das ändern!
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Ich hab' ja nicht viel Ahung von SQL, aber '2' ist doch ein String und verlangt wird ein int, oder?
Jan
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

thx voges

Code: Alles auswählen

values = "INSERT INTO adressen VALUES(%s, `%s`, `%s`, `%s`)" %(y[-4], y[-3],y[-2], y[-1])
sollte dann passen

Dookie *waldvorbäumennedgesehen*
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

also wir sollten den Vorschlag von Python noch einmal aufnehmen. Von MySql wiseen wir, das es nicht zu 100 Prozent dem Standard entspricht. (Standard hin oder her, jetzt will ich keine Grundatzdiskussion sondern ne funktionierende Lösung). Probier bitte nocheinmal folgendes:

Code: Alles auswählen

"insert into adressen (ID, NAME, ADRESSE, MAIL) values (%s, `%s`, `%s`, `%s`)"  %(y[-4], y[-3],y[-2], y[-1])
Der erste wert darf natürlich nicht in Anführungszeichen gesetzt werden, denn das ist ein Integer Wert und keine Zeichenfolge.

Hans
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

hans hat geschrieben:also wir sollten den Vorschlag von Python noch einmal aufnehmen. Von MySql wiseen wir, das es nicht zu 100 Prozent dem Standard entspricht.
Das hat ja mit dem Standard nichts zu tun. Wenn in der Doku steht, die Angabe ist optional, dann ist sie es auch und ich sollte mich darauf verlassen können, dass das dann auch so funktioniert. Sonst müsste ich ja jede Angabe einer Doku in Zweifel ziehen.
Jan
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Eigentlich hast du ja recht, aber wir "eiern" jetzt schon ziemlich lange an dem Prob herum. Ich wollte damit die Fehlermeldung "Unknown Column '2' in Fieldlist" auf jeden Fall vermeiden. Ich habs nicht ausprobiert, aber ich denke wenn ich dann '2' auf ID zuweisen will, kommt dann auch eine Fehlermeldung, von wegen falschem Datentyp.

Also wenns bei mir nicht laufen würde, dann würde ich glaube ich so ziemlich jede Möglichkeit ausschöpfen, Hauptsache ich komme zum Ziel. Einige Sachen muß man sich halt hart erarbeiten. :oops:

Hans
Glamdring
User
Beiträge: 104
Registriert: Sonntag 25. Mai 2003, 20:22
Wohnort: Freiburg i.B.
Kontaktdaten:

So, ich bins mal wieder und hab ein paar Änderungen vorgenommen,
ich habe die MySQL tabelle gelöscht und zur Kontrolle eine neueerstellt:
ID int not null, mail varchar(255).
Dann habe ich die Ideen von Dookie und Hans beachtet, der Code sieht jetzt so aus:

Code: Alles auswählen

from MySQLdb import *
from tkFileDialog import *
from string import *

# Die Datenbank und die Tabelle heissen adressen
def readin():
    print "Geben sie den Pfad an :"
    Dat = askopenfilename()
    dat = file(Dat, "a+")
    conn = connect(db="adressen")
    cursor = conn.cursor()
    cursor.execute("select * from adressen")
    erg = cursor.fetchall()
    for w in dat.readlines():
        y = w.split( "///")
        y.pop()
        w = w.rstrip()
        print y
        print w
        values = "INSERT INTO adressen (ID, mail) VALUES(%s, `%s`)" %(y[-2], y[-1])
        print cursor.execute(values)
        

readin()
Außerdem habe ich die Testdatei editiert:
2///testmail@mail.de///

es tritt aber immer noch folgender Fehler auf (liegts am @???):

Geben sie den Pfad an :
['2', 'Testmail@mail.de']
2///Testmail@mail.de///
Traceback (most recent call last):
File "C:\Python22\Datenbank.py", line 24, in ?
readin()
File "C:\Python22\Datenbank.py", line 21, in readin
print cursor.execute(values)
File "C:\Python22\Lib\site-packages\MySQLdb\cursors.py", line 61, in execute
r = self._query(query)
File "C:\Python22\Lib\site-packages\MySQLdb\cursors.py", line 168, in _query
rowcount = self._BaseCursor__do_query(q)
File "C:\Python22\Lib\site-packages\MySQLdb\cursors.py", line 112, in __do_query
db.query(q)
OperationalError: (1054, "Unknown column 'Testmail@mail.de' in 'field list'")

So das ist erstmal alles
Glamdring
Dies ist ein Platzhalter, er steht am Ende jeder meiner Beiträge! Erst wenn ich einen vernünftigen Text gefunden habe wird sich das ändern!
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

arrrggg! gib doch mal zusätzlich value mit aus. Da muß ein lauffähiges SQL-Scrip drin stehen, den man auch vom MySQL Prompt aus probieren kann.

Code: Alles auswählen

values = "INSERT INTO adressen (ID, mail) VALUES(%s, `%s`)" %(y[-2], y[-1])
ist m. E. nicht ganz richtig. Das Zeichen welches du verwendest, wird von MySQL vielleicht nicht als Textbegrenzer interpretiert. Versuch mal den Textbegrenzer auszutauschen. Bei mir auf der Tastatur ist das <Shift>+<#>. Der korrigierte Code sollte dann so aussehen

Code: Alles auswählen

values = "INSERT INTO adressen (ID, mail) VALUES(%s, '%s')" %(y[-2], y[-1])
print values
Hans
Glamdring
User
Beiträge: 104
Registriert: Sonntag 25. Mai 2003, 20:22
Wohnort: Freiburg i.B.
Kontaktdaten:

Juchuuuuuuuuuu!!!! :D :D
endlich gehts!!! :idea: :idea:


Danke @ all :D :D

Glamdring
Dies ist ein Platzhalter, er steht am Ende jeder meiner Beiträge! Erst wenn ich einen vernünftigen Text gefunden habe wird sich das ändern!
Glamdring
User
Beiträge: 104
Registriert: Sonntag 25. Mai 2003, 20:22
Wohnort: Freiburg i.B.
Kontaktdaten:

Doofer Weise hab ich wieder ein Problem :oops: :oops: :oops: :oops:

Den Code zum versenden des Newsletters:

Code: Alles auswählen

"""einlesen und senden"""
import os
import MySQLdb
def send(Text):
    conn = MySQLdb.connect(db="adressen")
    cursor = conn.cursor()
    cursor.execute('select * from adressen')
    all = cursor.fetchall()
    print all
    dat = file("prog.html", "a")
    dat.write("<HTML><BODY>")
    for i in range(len(all)):
        dat.write("<A HREF=\"mailto:")
        cursor.execute('where ID =') # wie schaffe ich es i mit rein  zu bekommen????????????????????
        mail = cursor.fetchall()
        dat.write(mail)
        dat.write("?body=" + text)
        dat.write("\"><BR><BR>")
    dat.write("</BODY></HTML>")
    dat.close()
    os.startfile("prog.html")

text = raw_input("Bitte geben sie den Text ein:")
send(text)
Wie schaffe ich es MYSQl folgenden Code zu übermitteln:
where ID = i ???

Hilfe wäre echt nett
Glamdring
Dies ist ein Platzhalter, er steht am Ende jeder meiner Beiträge! Erst wenn ich einen vernünftigen Text gefunden habe wird sich das ändern!
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

cursor.execute('SELECT * FROM adressen WHERE ID=%s' % (i))
Glamdring
User
Beiträge: 104
Registriert: Sonntag 25. Mai 2003, 20:22
Wohnort: Freiburg i.B.
Kontaktdaten:

:oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops:

Manchmal sieht man den Wald vor Bäumen nicht!!!


thx @ Dookie
Dies ist ein Platzhalter, er steht am Ende jeder meiner Beiträge! Erst wenn ich einen vernünftigen Text gefunden habe wird sich das ändern!
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

intgellligenter wäre es aber, gleich die Einträge in der Liste "all" zu verwenden.

Code: Alles auswählen

    for i in range(len(all)):
        dat.write("<A HREF=\"mailto:")
        mail = all[i]
        dat.write(mail)
oder gleich

Code: Alles auswählen

    for mail in all:
        dat.write("<A HREF=\"mailto:")
        dat.write(mail)
Dookie[/code]
Glamdring
User
Beiträge: 104
Registriert: Sonntag 25. Mai 2003, 20:22
Wohnort: Freiburg i.B.
Kontaktdaten:

Hört sich gut an, das übnernehm ich gradmal.

Danke
Glamdring
Dies ist ein Platzhalter, er steht am Ende jeder meiner Beiträge! Erst wenn ich einen vernünftigen Text gefunden habe wird sich das ändern!
Antworten