Hi Randy!
inside of __declare_first__() the table is ready, you can just set it up
def __declare_first__(cls):
Index("my_idx", cls.__table__.c.colname)
have a great holiday season!
- mike
On Tue, Dec 14, 2021, at 4:32 PM, 'Randy Syring' via sqlalchemy wrote:
> I'm trying to create a mixin that will setup FK columns that are dynamically
> named based on the name of the parent as opposed to a static name like
> `parent_id`. If was going to do the latter, I could easily use
> `declarted_attr` but since I want the former, I thought I could use
> `__declare_first__()`. It works except that I also need to setup an index on
> the FK column. When trying to do that with `__table_args__()`, I get an
> exception b/c, `__table_args__()` gets called before `__declare_first__()`.
>
> class FlawMixin:
>
> @sa.orm.declared_attr
> def __tablename__(cls):
> return f'{cls.__flaw_ident__}_flaws'
>
> @sa.orm.declared_attr
> def __table_args__(cls):
> return (
> sa.Index(f'ix_{cls.__flaw_ident__}_flaws_{cls.__flaw_ident__}',
> f'{cls.__flaw_ident__}_id'),
> )
>
> @classmethod
> def __declare_first__(cls):
> setattr(cls, f'{cls.__flaw_ident__}_id', sa.Column(
> sa.Integer,
> sa.ForeignKey(cls.__flaw_parent__.id, ondelete='cascade'),
> nullable=False
> ))
> setattr(cls, cls.__flaw_ident__,
> sa.orm.relationship(cls.__flaw_parent__, lazy='raise_on_sql'))
>
> I realize I have an event ordering issue with the way this is setup. Just
> not sure what the correct way is to solve it.
>
> Thanks in advance for any help you can provide.
>
>
> --
> 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 [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/sqlalchemy/45921724-ba6a-40e5-8ae9-cad92169ddfbn%40googlegroups.com
>
> <https://groups.google.com/d/msgid/sqlalchemy/45921724-ba6a-40e5-8ae9-cad92169ddfbn%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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/sqlalchemy/ffcaedf7-e44b-48e8-b1e6-e6f39a42cdf6%40www.fastmail.com.