Thanks for taking the time to answer.

Doing what you say means that then I have to import the models classes from
the *sql.py* module instead of the *models.py*. Am I right? Or the
association_proxy attribute is then available to the original class (as it
happens when using mapper)?  I'm not super familiar with the automagic of
SQLAlchemy...

On Mon, Jul 24, 2017 at 1:50 AM, Mike Bayer <mike...@zzzcomputing.com>
wrote:

> On Sun, Jul 23, 2017 at 11:26 AM, Ruben Di Battista
> <rubendibatti...@gmail.com> wrote:
> > Hello,
> >
> > I'm trying to introduce database persistence into an already existent
> class
> > hierarchy. That mean I have in a separate module all the class
> representing
> > the models of my application (without SQL interaction methods), then I
> have
> > in another module the SQL schema and the mapping (so I'm using the
> classical
> > mapping):
> >
> > sql.py
> >
> > import sqlalchemy.orm as orm
> > from sqlalchemy import Metadata, Integer, String, DateTime
> > from myproject.models import Item, Order
> >
> > metadata = MetaData()
> >
> > item = Table('item', metadata,
> >              Column('id', Integer, primary_key=True),
> >              Column('name', String),
> >              Column('quantity', Integer)
> >              )
> >
> > order = Order('order', metadata,
> >               Column('id', Integer, primary_key=True),
> >               Column('date', DateTime),
> >              )
> >
> > orm.mapper(Item, item)
> > orm.mapper(Order, order)
> >
> >
> >
> >
> > models.py
> > class Item(object):
> >     def __init__(self, name, quantity):
> >         self.name = name
> >         self.quantity = quantity
> >
> > class Order(object):
> >     def __init__(self, date):
> >         self.date = date
> >
> > Now I would like to introduce a M2M relationship with additional column
> in
> > the association table:
> >
> > order_item = Table('order_item', metadata,
> >                    Column('order_id', Integer, ForeignKey('order.id')),
> >                    Column('item_id', Integer, ForeignKey('item.id')),
> >                    Column('price', Float)
> >                   )
> >
> >
> > In the documentation, when they present the Association proxy, they do
> that
> > in a declarative way. So they add an attribute to the class:
> >
> > # ... Class definition ...
> > items = association_proxy('order_items', 'items')
> >
> >
> > Is there a way to achieve this without touching the classes in models.py?
> > Maybe using the orm.mapper? Or the only way is to modify the class adding
> > the association proxy like in the documentation? Do you have any
> reference
> > to point me out on the right direction to use association proxies with
> > classical mapping?
>
> Basically, just do this:
>
> orm.mapper(Order, order)
> Order.items = association_proxy('order_items', 'items')
>
> The association proxy is independent of the declarative system and if
> you look in early documentation you'll see it described in terms of
> classical mapping.
>
> As far as the term "without touching the classes", there's not much
> point trying to be purist about this as the call to mapper(Order,
> order) highly alters the Order class in any case.
>
>
> >
> > Thanks,
> >
> > PS: You find this same question on SO, if you want you can answer also
> > there.
> >
> >
> >
> > --
> > 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.
>
> --
> 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 a topic in the
> Google Groups "sqlalchemy" group.
> To unsubscribe from this topic, visit https://groups.google.com/d/
> topic/sqlalchemy/Od9Gzuwj9-I/unsubscribe.
> To unsubscribe from this group and all its topics, 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.
>



-- 
          _
-.     .´  |∞∞∞∞
  ',  ;    |∞∞∞∞∞∞
    ˜˜     |∞∞∞∞∞∞∞∞∞ RdB
    ,.,    |∞∞∞∞∞∞
  .'   '.  |∞∞∞∞
-'       `'
http://rdb.is

-- 
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