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:

Beitragvon Glamdring » Mittwoch 28. Mai 2003, 16:14

So, ich hab den Code mal wieder mir eurer Hilfe aktualisiert und es gibt einen neuen Fehler:
Traceback (most recent call last):
File "C:\Python22\Datenbank.py", line 25, in ?
readin()
File "C:\Python22\Datenbank.py", line 22, in readin
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 '2' in 'field list'")

Wenn ich das richtig verstehe(was nicht sein muss) versteht er 2 nicht oder es ist nicht das gewünschte Format ( Integer stat ???)

Aber ich habe das erste Element (welches 2 ist) mit int not null belegt, und so wie ich das sehe (oder sehen kann) ist 2 int not null!

Achja, der neue Code:

Code: Alles auswählen

# 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( "///")
        print y
        print w
        values = "insert into adressen values (`%s`, `%s`, `%s`, `%s`)" %(y[-4], y[-3],y[-2], y[-1])
        print values
        #cursor.execute("insert into adressen values(y[-4], y[-3],y[-2], y[-1])")
        #cursor.execute("insert into adressen values (`%s`, `%s`, `%s`, `%s`)")  %(y[-4], y[-3],y[-2], y[-1])
        cursor.execute(values)
       

readin()

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!
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Mittwoch 28. Mai 2003, 16:41

is ein sql-Problem, was gibt er denn bei den printstatements aus? Poste am Besten die ganze Ausgabe von Deinem Programm.

Gruß

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

Beitragvon Glamdring » Mittwoch 28. Mai 2003, 17:17

OK, hier die Ausgabe vom ganzen Programm:


Geben sie den Pfad an :
['2', 'Test', 'Testadresse', 'Testmail@mail.de\n']
2///Test///Testadresse///Testmail@mail.de

insert into adressen values (`2`, `Test`, `Testadresse`, `Testmail@mail.de
`)
Traceback (most recent call last):
File "C:\Python22\Datenbank.py", line 25, in ?
readin()
File "C:\Python22\Datenbank.py", line 22, in readin
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 '2' in 'field list'")


Gruss
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!
Voges
User
Beiträge: 564
Registriert: Dienstag 6. August 2002, 14:52
Wohnort: Region Hannover

Beitragvon Voges » Mittwoch 28. Mai 2003, 17:46

Glamdring hat geschrieben:insert into adressen values (`2`, `Test`, `Testadresse`, `Testmail@mail.de
`)

Ich glaub' zwar nicht, dass das was damit zu tun hat, aber Du hast da am Ende noch einen Zeilenvorschub. Füge mal vor der split()-Zeile noch folgende Zeile ein:
w = w.rstrip()
Jan
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Mittwoch 28. Mai 2003, 18:04

jetzt wär noch interessant, wie die MySQL-Tabelle aufgebaut ist
Glamdring
User
Beiträge: 104
Registriert: Sonntag 25. Mai 2003, 20:22
Wohnort: Freiburg i.B.
Kontaktdaten:

Beitragvon Glamdring » Mittwoch 28. Mai 2003, 18:35

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!
Benutzeravatar
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Beitragvon Dookie » Mittwoch 28. Mai 2003, 18:59

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:

Beitragvon Glamdring » Mittwoch 28. Mai 2003, 19:04

@ 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

Beitragvon Voges » Mittwoch 28. Mai 2003, 19:06

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

Beitragvon Dookie » Mittwoch 28. Mai 2003, 20:27

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*
Benutzeravatar
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Beitragvon hans » Mittwoch 28. Mai 2003, 20:32

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

Beitragvon Voges » Mittwoch 28. Mai 2003, 20:57

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
Benutzeravatar
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Beitragvon hans » Mittwoch 28. Mai 2003, 21:07

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:

Beitragvon Glamdring » Donnerstag 29. Mai 2003, 14:05

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!
Benutzeravatar
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Beitragvon hans » Donnerstag 29. Mai 2003, 18:13

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder