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

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

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
Zuletzt geändert von derdon am Donnerstag 18. Dezember 2008, 17:29, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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!
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

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?
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Schon mal versucht die Datenbank nochmal anzulegen?

[OT]SQLAlchemy 0.5.0rc4 ist momentan aktuell...[/OT]
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Ja, geschätzte 30 mal :wink: Ich werde mir jetzt mal 0.5.0rc4 runterladen und installieren.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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 ...
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

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!
Zuletzt geändert von derdon am Mittwoch 17. Dezember 2008, 22:12, insgesamt 1-mal geändert.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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!
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

: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)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
Antworten