I'd prefer to catch some more specific exceptions even though they'd never be generated by most backends rather than decoding SQLSTATE and use if-s or other dispatching method based on what this variable/ exception attribute holds.
On Sep 12, 1:17 pm, jason kirtland <[EMAIL PROTECTED]> wrote: > ANSI defines the SQLSTATE error codes for portable errors. I think > there is SQLSTATE support in most of the databases SQLAlchemy supports > (but none in SQLite that I can find), and the error code should be > available via db-api either directly (pyscopg2, mysql-python, at > minimum) or can parsed out of the text error message. > > SQLSTATE is a structured 5 char string that embeds the class of error. > You could, say, examine just the first two chars to find out that the > error is some kind of constraint violation, or consider the whole code > to see that it's a specific duplicate key error. > > But like everything else sql, database vendors seem to vary in their > support. Not all database errors are mapped or even mappable at all to > a defined condition in the sql spec. So even the standard SQLSTATE > codes don't seem to be useful in practice as much more than a hint, > albeit a much better hint than anything else available. > > That said, I'm +1 on having SQLSTATE and the error message string > available as standard attributes on the DBAPIError wrapper. I'm -1 on > also providing attribute access to the database's internal error number > or code. > > I don't think I'd be enthusiastic about any proposal to actually modify > the type of exception based on the SQLSTATE or error code, at least not > until the magic day when all databases raise consistent errors. Until > then, shadowing the db-api exception type as we do now feels like the > path of least surprise. > > Michael Bayer wrote: > > we do want to get error code availability into our exception classes > > (still waiting for any DBAPIs besides psycopg2 to provide these with > > no parsing requirement), and there are some cases where we want to > > evaulate an exception to discern it from others (such as detecting > > database timeouts), but the level of "magic" (i.e., you get some > > magic SQLAlchemy error which you cant google for, has less fine- > > grained detail than the actual DB error, user database errors now > > become SQLAlchemy issues) as well as the huge maintenance problem > > this approach would bring (DBAPIs are totally inconsistent, changing > > all the time, etc) would be a lot more trouble than its worth, as far > > as it being built-in, default behavior. The number of exception > > concepts that are truly portable is relatively low (like duplicate > > key), so any such functionality I'd say would have to remain as an > > electable. > > > On Sep 12, 2007, at 11:30 AM, askel wrote: > > >> Hello everybody, > > >> I was wondering why neither DBAPI nor SA define standard exceptions > >> like "Duplicate key error". It seems to be no portable way to catch > >> this situations and give user more sensible error messages than just > >> "We are failed to insert a new record". And using exception > >> information to generate error messages make it even more confusing for > >> regular (non-Pythonic :) ) people. Since SA dialects deal with > >> implementation details wouldn't it be natural to have them translate > >> DBAPI exceptions to something more usable as well? > > >> Cheers --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---