Seite 1 von 1

[gelöst] SA: DataError nach session.commit()

Verfasst: Mittwoch 17. Dezember 2008, 15:22
von derdon
Hallo,

ich brauche für eine web-app ein Loginsystem. Für WSGI setze ich Werkzeug und als ORM SQLAlchemy ein. Wenn ich

Code: Alles auswählen

./manage-login.py initdb
und danach

Code: Alles auswählen

./manage-login.py shell
ausführe, gibt es keine Fehlermeldungen (=alles läuft, wie es soll). Versuche ich aber in der Werkzeug-Shell einen neuen Benutzer hinzuzufügen, dann gibt es den folgenden Traceback: http://paste.pocoo.org/show/95665/. Hier die models.py

Verfasst: Mittwoch 17. Dezember 2008, 19:10
von Hyperion
steht doch da unten:

Code: Alles auswählen

DataError: (DataError) FEHLER:  Wert zu lang für Typ character varying(8)
Du packst da was rein, was zu lang ist für das Feld!

Verfasst: Mittwoch 17. Dezember 2008, 20:18
von derdon
Hab jetzt bei allen Spalten die Länge auf 100 gesetzt: Ergebnis bleibt das gleiche. Und welches Feld meinst du mit "das Feld"? Durch die Fehlermeldung konnte ich leider keinen Hinweis darauf bekommen, welche Spalte denn betroffen ist.

Verfasst: Mittwoch 17. Dezember 2008, 21:05
von Hyperion
In Zeile 130 steht das doch! (also mein Quote da oben!)

Du willst einen String in ein DB-Feld schreiben, der länger als 8 Zeichen lang ist. Dein Feld (ich vermute hash - aber das musst Du ja wissen ;-)) ist einfach zu klein definiert für das, was Du da rein packen willst.

War das wirklich so schwer zu erkennen? Ich meine es gibt ja manchmal wirklich kryptische Fehlermeldungen ... aber die ist doch wirklich mal aussagekräftig.

Verfasst: Mittwoch 17. Dezember 2008, 21:15
von derdon
Die Fehlermeldung ergibt für mich aber keinen Sinn. Hier noch einmal die models.py. Der Inhalt von jedem Feld kann also mehr als 8 Zeichen enthalten! Warum steht in der Fehlermeldung, dass irgendein Wert nicht länger als 8 Zeichen sein darf, wenn ich das in models.py anders definiert habe?

Verfasst: Mittwoch 17. Dezember 2008, 21:21
von DasIch
Schon mal versucht die Datenbank nochmal anzulegen?

[OT]SQLAlchemy 0.5.0rc4 ist momentan aktuell...[/OT]

Verfasst: Mittwoch 17. Dezember 2008, 21:24
von derdon
Ja, geschätzte 30 mal :wink: Ich werde mir jetzt mal 0.5.0rc4 runterladen und installieren.

Verfasst: Mittwoch 17. Dezember 2008, 21:27
von Hyperion
derdon hat geschrieben:Ja, geschätzte 30 mal :wink: Ich werde mir jetzt mal 0.5.0rc4 runterladen und installieren.
Hast Du Dir die DB mal mit einem Viewer angeguckt? (z.B. hiermit: https://addons.mozilla.org/de/firefox/addon/5817)

Ich wette da steht eben doch ein varchar( 8 ) irgend wo drin ...

Verfasst: Mittwoch 17. Dezember 2008, 21:59
von derdon
Nach ein paar Experimenten habe ich herausgefunden, das der Fehler mit dem verwendeten DBMS zusammenhängt. Wenn ich eine SQLite Datenbank benutze, gibt es keine Fehler und alles läuft wie es laufen soll. Stelle ich die Verbindung aber mit PostgreSQL auf, dann gibt es die genannten Fehlermeldungen. Ich verbinde mich mit dem PostgreSQL-Server nach dem gleichem Schema wie in der Doku beschrieben.

Code: Alles auswählen

postgres://postgres:you-will-never-guess@localhost/my_login
Ist das richtig, dass ich als Benutzer postgres angeben muss, weil er sozusagen der root bei Postgre ist?


EDIT: Danke Hyperion für das supercoole FF-Addon!

Verfasst: Mittwoch 17. Dezember 2008, 22:09
von Hyperion
derdon hat geschrieben:Nach ein paar Experimenten habe ich herausgefunden, das der Fehler mit dem verwendeten DBMS zusammenhängt. Wenn ich eine SQLite Datenbank benutze, gibt es keine Fehler und alles läuft wie es laufen soll. Stelle ich die Verbindung aber mit PostgreSQL auf, dann gibt es die genannten Fehlermeldungen.
Der Fehler sieht mir nicht nach einem connect-Fehler aus! Kann man ja einfach checken: Gib mal ne falsche Angabe ein bei den login-Daten. Wenn derselbe Fehler kommt, kommste nicht in die DB rein ...

(Wobei man das doch mal vorher testet und konfiguriert?!? Dazu gibt es doch genug Tools!

Fall gelöst

Verfasst: Mittwoch 17. Dezember 2008, 22:27
von derdon
:oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops: :oops:

Code: Alles auswählen

my_login=# \d users
                               Tabelle »public.users«
 Spalte |          Typ          |                     Attribute                      
--------+-----------------------+----------------------------------------------------
 id     | integer               | not null default nextval('users_id_seq'::regclass)
 name   | character varying     | 
 email  | character varying     | 
 salt   | character varying(8)  | 
 hash   | character varying(40) | 
Indexe:
    »users_pkey« PRIMARY KEY, btree (id)
Irgendwie hat da wohl jemand Mist gebaut... Sorry, dass ich euch deswegen genervt hab. Nach Löschen und Neuanlegen der Tabelle, sieht die Struktur so aus und alles ist bestens:

Code: Alles auswählen

my_login=# \d users
                               Tabelle »public.users«
 Spalte |          Typ          |                     Attribute                      
--------+-----------------------+----------------------------------------------------
 id     | integer               | not null default nextval('users_id_seq'::regclass)
 name   | character varying(50) | 
 email  | character varying(50) | 
 salt   | character varying(20) | 
 hash   | character varying(40) | 
Indexe:
    »users_pkey« PRIMARY KEY, btree (id)
    »users_name_key« UNIQUE, btree (name)

Verfasst: Mittwoch 17. Dezember 2008, 22:40
von Hyperion
derdon hat geschrieben: EDIT: Danke Hyperion für das supercoole FF-Addon!
Büdde :-) Wobei ich da Probleme mit dem Cursor im SQL-Eingabefeld habe ... also so toll isses dann auch wieder nicht, aber schön unkompliziert :-)

Ansonsten arbeite ich gerne mit SQuirreL. Das Schweizer Taschenmesser unter den DB-Shells imho. Nachteil: Man kann damit keine DBs anlegen! Dafür Code-Completion usw.