Am Montag, 17. November 2014 16:25:54 UTC+1 schrieb Michael Bayer:
>
>
> On Nov 17, 2014, at 7:37 AM, Guido Winkelmann <
> gu...@ambient-entertainment.de <javascript:>> wrote:
>
> Hi,
>
> How can I go about having a cross-platform compatible compound unique 
> constraint over two columns where there can be only one record with NULL in 
> one column and a given value in the other?
>
> I want something like this:
>
> UniqueConstraint("parent_id", "name")
>
> except "parent_id" is nullable, and I want to disallow creating multiple 
> records with parent_id=NULL and the same name. The problem here is that 
> some database management systems, PostgreSQL for example, will treat all 
> NULL values as not-equal inside a unique constraint, which makes sense for 
> a single column unique, but not really for a multi-column one. This will 
> allow multiple records with the same name and parent_id=NULL again.
>
> In PostgreSQL, apparently I would need to create a unique index in 
> addition to the constraint. I would really like to solve this without 
> writing database-specific code, though.
>
> Does anybody have a good solution for that?
>
>
> I’ve had an issue in this area before and decided just to forego it; I was 
> targeting PG and SQL Server, but I don’t remember exactly which NULL 
> behavior I was looking for.   per the SQL standard I think PG’s behavior is 
> correct. NULL means, “unknown”, so two NULL values are never equivalent.
>

 If I wanted to add a manual check in Python for that, how would I go about 
that?

Could I register an event handler for the "before_insert" event for this 
model?

What would the event handler have to do to refuse an insert? Throw an 
exception?


   Guido W.

-- 
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 http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to