the async aspect here is not that important, for Declarative + reflection 
you likely should look at DeferredReflection: 
https://docs.sqlalchemy.org/en/14/orm/declarative_tables.html#using-deferredreflection

for async, where it has in the example:

Reflected.prepare(engine)

you would instead say:

await async_connection.run_sync(Reflected.prepare)



On Wednesday, December 14, 2022 at 8:43:45 AM UTC-5 dcs3spp wrote:

> Hi,
>
> I am using alembic to apply a migration for a postgresql view using an *async 
> *engine.
> I can see this successfully applied in the database.
>
> I have the following declarative mapped class to  the view, defined as:
>
>
>
>
>
> *class MailingListView(Base):     """View for mailing labels.    After 
> metata reflection from db -> model expecting columns to    be available on 
> this class.     """*
> *    __tablename__ = "mailing_list_view"*
>
>
>
> *    # Specify the column override from the underlying view that is the 
> primary key    id = Column(UUID(as_uuid=True), primary_key=True)    *
>
>
>
>
>
>
>
>
>
> *    # Expecting  these columns  below to be mapped in this class after    
> # metadata reflection. Currently have to uncomment these    # to manually 
> synchronise with view!    #    # addressee = Column(String)    # street = 
> Column(String)    # town = Column(String)    # county = Column(String)    # 
> postcode = Column(String)    # cursor = Column(String)*
>
> I am reflecting the views using the following:
>
>      
>
>
>
>
>
>
> * def use_inspector(conn):            inspector = inspect(conn)            
> return inspector.get_view_names()        views = await 
> connection.run_sync(use_inspector)        # I can see the table columns in 
> __table__.c.keys()        # after the reflection below has run*
> *        await connection.run_sync(*
> *            target_metadata.reflect,*
> *            only=views,*
> *            views=True,*
> *            extend_existing=True,*
> *        )*
>
> After performing the above reflection I can see that my mapped model has 
> the underlyingtable columns updated with those defined in the underlying 
> view.
>
>
>
> *obj = MailingListView()obj.__table__.c.keys()*
> However, the properties of my mapped class are not updated after 
> reflection, raising an exception:
>
>
>
> *obj = MailingListView()obj.town = "town" # this raises an exception with 
> unavailable property*
> How is it possible for a postgresql db (asyncpg) + async sqlalchemy to:
>
> Synchronise the columns of a declarative model with its underlying table 
> after metadata reflection. Currently, I have to manually specify the 
> columns in the declarative model.
>
>
>

-- 
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/6cb2e213-02a3-4d9f-921f-ec6886ad68ecn%40googlegroups.com.

Reply via email to