Any updates to this Michael? I've been researching about this but couldn't 
find a better solution than parsing the error message with regex. Would 
love to hear if there's a better way of doing this.

On Saturday, December 20, 2014 at 12:52:49 AM UTC+5:30, Michael Bayer wrote:
>
>
>
> alchemy1 <veeruk...@hotmail.com <javascript:>> wrote:
>
> I'm using ORM and I've defined a unique constraint on a column, and I want 
> to prevent inserting another row with the same value for that column. For 
> example if you don't want 2 users with the same name.
>
> One way to prevent it would be to take the provided name and query the 
> user table to see if anyone has that name, and if not then insert the 
> record. The problem with this is that in between checking for the name and 
> inserting the name, someone else could have inserted a record with that 
> name. So is there any advantage to doing this? Is there any better way to 
> do it?
>
> If not, I suppose you'd want to handle the IntegrityError that SQLAlchemy 
> throws when it detects a unique constraint violation. But since 
> IntegrityError handles several types of types of violations, would checking 
> the string of the error message be the only way to ensure you're handling 
> the correct error condition, so that you can put a specific message like "A 
> user with that name already exists"?
>
> sqlalchemy.exc.IntegrityError: (IntegrityError) duplicate key value violates 
> unique constraint "name_of_constraint"
>
> If so, how can I use metadata to get the name of the particular constraint 
> I have in mind, so that I can search for it in the error message string? 
> I've tried looking through the MetaData API and have got this far but I am 
> stuck. I can't seem to find the constraint name set on the name column here.
>
> Base.metadata.tables.user.c.name
> User.name.info
>
>
> yes, the non-standardization of DBAPI errors is something SQLAlchemy as 
> yet has not tried to solve, though in very recent releases it has begun to 
> provide hooks so that these solutions can be rolled more liberally.   The 
> way I’ve solved this in Openstack looks like this:  
>
>
> https://github.com/openstack/oslo.db/blob/0265aa4e01270b8fc7cab1266b8602e1921c9ddb/oslo/db/sqlalchemy/exc_filters.py#L93
>
> that regular expression is built upon a larger system that ultimately 
> makes use of the SQLAlchemy handle_error() event, which is new in recent 
> 0.9 series.    You can see that we pull the columns out of the exception 
> message itself.
>
>
>
>
>
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to sqlalchemy+...@googlegroups.com <javascript:>.
> To post to this group, send email to sqlal...@googlegroups.com 
> <javascript:>.
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.
>
>

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to