On Mon, Jul 22, 2019, at 10:51 PM, Jonathan Vanasco wrote:
> 
> 
> On Monday, July 22, 2019 at 9:36:10 PM UTC-4, Mike Bayer wrote:
>> 
>> likely , the "create_constraint" flag should default to False for booleans 
>> and enums. I think it was a mistake to default these to true, I think people 
>> usually don't care.
> 
> Everything you said was apparent to me, but I'm a seasoned SqlAlchemy user. I 
> dove into the docs and didn't see warning dragons or anything that would 
> suggest this happens alongside the Alembic or Boolean docs... this seemed 
> like something that would trip up inexperienced users.
> 
> I'm assuming I never saw this before on Postgres or MySql because sqlite 
> requires a constraint to mimic boolean behaviors as there is no native type, 
> but I usually reflect tables on those platforms so that could be the reason.
> 
> Would it make sense to default the constraint name to something like 
> "sa_autoname_xxxxx' where xxxx is a random hash?

I would say no, because you are asking SQLAlchemy to make a guess a a name when 
the database would normally be doing this; however, that's not taking place 
since you've explicitly told it about a naming convention you'd like to use! if 
this naming convention should include "sa_autoname_xxxx" that should be 
explicit within the naming convention.

this points to that, you probably don't want to be using %(constraint_name)s in 
your convention. Probably some other kind of token, like 
%({constraint_name:sa_autoname_12345})s or something, that is, some as-yet not 
defined feature to add to naming convention that allows constraint_name to have 
a fallback of some kind.

However, you can make this feature yourself, as naming conventions allow custom 
callables:

https://docs.sqlalchemy.org/en/13/core/constraints.html#constraint-naming-conventions

it's near the end, and is a little weird in this case, but looks like:

def auto_constraint_name(constraint, table):
 if constraint.name is None or constraint.name == "_unnamed_":
 return "sa_autoname_%s" % str(uuid.uuid4())[0:5]
 else:
 return constraint.name

NAMING_CONVENTION = {
 "auto_constraint_name": auto_constraint_name,
 "ix": 'ix_%(column_0_label)s',
 "uq": "uq_%(table_name)s_%(column_0_name)s",
 "ck": "ck_%(table_name)s_%(auto_constraint_name)s",
 "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s",
 "pk": "pk_%(table_name)s"
}
_metadata = sqlalchemy.MetaData(naming_convention=NAMING_CONVENTION)


as always, this is not well documented, especially the weirdness with 
"_unnamed_" which is a default token of sorts, and if you have any time to help 
at all creating an example and/or working out use cases to make this easier for 
this as it should likely be the default for "ck", let me know.







> 
> 
> 

> --
> 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 view this discussion on the web visit 
> https://groups.google.com/d/msgid/sqlalchemy/0afd534d-f60c-4434-9a61-3db41e918bc5%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/sqlalchemy/0afd534d-f60c-4434-9a61-3db41e918bc5%40googlegroups.com?utm_medium=email&utm_source=footer>.

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/f473da1a-e320-495c-a8bd-f417f4dec86b%40www.fastmail.com.

Reply via email to