the polymoprhic_load=inline is mostly a typing saver in 1.2, you can
get that same effect by putting a with_polymorphic on the base mapper
in previous versions.

On Tue, Apr 3, 2018 at 10:17 AM, Julien Cigar <[email protected]> wrote:
> On Tue, Apr 03, 2018 at 10:05:22AM -0400, Mike Bayer wrote:
>> On Tue, Apr 3, 2018 at 9:59 AM, Julien Cigar <[email protected]> wrote:
>> > On Tue, Apr 03, 2018 at 12:20:53PM +0200, Julien Cigar wrote:
>> >> On Thu, Mar 22, 2018 at 10:58:56AM +0100, Julien Cigar wrote:
>> >> > On Tue, Mar 20, 2018 at 08:32:14PM -0400, Mike Bayer wrote:
>> >> > > I think it would be a lot easier to have the corresponding translation
>> >> > > linked off using relationship().   can you work with that?
>> >> >
>> >>
>> >> Hello Mike,
>> >>
>> >> I tried with relationships, but I'm not too satisfied with the generated
>> >> SQL, which makes me belived that I'm doing something wrong..
>> >>
>> >> I've GIST the relevant parts of my mappers and the generated SQL at
>> >> https://gist.github.com/silenius/0fedf2bcb92b7e5c6f27732678c5baa0
>> >>
>> >> I'm wondering if overriding the 'translations' relationship as I do is
>> >> the correct approach ..? In theory the "ContentTranslation" should be
>> >> somewhat "dynamic", but I wonder if SQLAlchemy supports something like
>> >> this .. ? By "dynamic" I mean it should be DocumentTranslation, or
>> >> EventTranslation, ... regarding of the polymorphic_identity of the "other
>> >> side" of the relationship
>> >>
>> >> Thanks !
>> >>
>> >> Julien
>> >
>> > OK, I think I found the "correct way" to do it, thanks to the new
>> > polymorphic_load parameter of SQLAlchemy 1.2:
>> > https://gist.github.com/silenius/5afc06e670f5f7dda548dc5a0d0583df
>> >
>> > (I've also added a trigger on the content_translation table so
>> > "duplicate" the content_type_id column (as setting polymorphic_on on
>> > an SQL statement isn't supported))
>> >
>> > With polymorphic_load='inline' and lazy='subquery' I have only two SQL
>> > statements to load the whole entities + associated translations (while
>> > being "strict" on the SQL relationships)
>> >
>> > any comments ? :)
>> >
>>
>>
>> wow, I already don't even remember what polymorphic_load does.    I
>> need to work your example into a declarative demo so I can play with
>> it.   but I am encouraged.
>
> (... and, although I use SQLAlchemy since many years, I'm always
> impressed how flexible and well written it is)
>
> I'm currently at $work but I can write a small declarative demo as soon
> as I got home
>
>>
>>
>>
>> > Thanks,
>> > Julien
>> >
>> >>
>> >> > I could .. :) I'll make some "helper functions" or maybe a custom Query
>> >> > object, with maybe some proxy-like properties too
>> >> >
>> >> > Thanks
>> >> >
>> >> > >
>> >> > > On Tue, Mar 20, 2018 at 9:19 AM, Julien Cigar 
>> >> > > <[email protected]> wrote:
>> >> > > > Hello,
>> >> > > >
>> >> > > > I have an existing CMS-like application which uses joined table
>> >> > > > inheritance at its core. Basically I have a base class Content from
>> >> > > > which all other classes (Folder, Document, Event, File, ...) 
>> >> > > > inherit.=20
>> >> > > > It works wonderfully well. This is my (Postgre)SQL schema if you 
>> >> > > > are=20
>> >> > > > interested:=20
>> >> > > > https://gist.githubusercontent.com/silenius/2e0f69fadfde9877e32c5b778efd39a=
>> >> > > > f/raw/f08e2af2f7cd239c865777d1e54342ee53608520/sa.sql
>> >> > > >
>> >> > > > Now we'd like to support multiple languages. We plan to add an=20
>> >> > > > additional table for each inherited class (additional translation=20
>> >> > > > table approach), so basically we'll have something like:
>> >> > > >
>> >> > > > content_type
>> >> > > >    |
>> >> > > >    |
>> >> > > > content --- content_translation
>> >> > > >    |
>> >> > > >    |
>> >> > > > document --- document_translation
>> >> > > >
>> >> > > > Currently I have a 
>> >> > > > polymorphic_on=3Dtables.content.c.content_type_id on=20
>> >> > > > the base mapper (Content) and 
>> >> > > > polymorphic_identity=3Dget_type_id(config,
>> >> > > > 'some_content_type_name') for each inherited mapper (the get_type_id
>> >> > > > function simply return the content_type ID:
>> >> > > > https://gist.github.com/silenius/25b8f46192b5b9b23477fe0c541bd9f3 )
>> >> > > >
>> >> > > > As the application is quite large I'd like to avoid having to 
>> >> > > > refactor a
>> >> > > > lot of code.
>> >> > > >
>> >> > > > I wondered what would be the best SQLAlchemy approach to do this?
>> >> > > >
>> >> > > > For example let's say I have something like this in my application:
>> >> > > > session.query(Document).all() which SQLAlchemy translates as:
>> >> > > >
>> >> > > > SELECT ..  FROM content=20
>> >> > > > JOIN document ON content.id =3D document.content_id
>> >> > > >
>> >> > > > Is there some mapper configuration that I could change so that it
>> >> > > > translates now as:
>> >> > > >
>> >> > > > SELECT .. FROM content=20
>> >> > > > JOIN content_translation=20
>> >> > > >     ON content.id =3D content_translation.content_id=20
>> >> > > >     AND content_translation.lang =3D 'some_language_code'=20
>> >> > > > JOIN document ON document.content_id =3D content.id=20
>> >> > > > JOIN document_translation=20
>> >> > > >     ON document_translation.document_id =3D document.content_id=20
>> >> > > >     AND document_translation.lang =3D 'some_language_code'
>> >> > > >
>> >> > > > If not, what would be the best approach?
>> >> > > >
>> >> > > > Thanks !
>> >> > > >
>> >> > > >
>> >> > > > --
>> >> > > > Julien Cigar
>> >> > > > Belgian Biodiversity Platform (http://www.biodiversity.be)
>> >> > > > PGP fingerprint: EEF9 F697 4B68 D275 7B11  6A25 B2BB 3710 A204 23C0
>> >> > > > No trees were killed in the creation of this message.
>> >> > > > However, many electrons were terribly inconvenienced.
>> >> > > >
>> >> > > > --
>> >> > > > 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 post to this group, send email to [email protected].
>> >> > > > 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 the Google 
>> >> > > Groups "sqlalchemy" group.
>> >> > > To unsubscribe from this group and stop receiving emails from it, 
>> >> > > send an email to [email protected].
>> >> > > To post to this group, send email to [email protected].
>> >> > > Visit this group at https://groups.google.com/group/sqlalchemy.
>> >> > > For more options, visit https://groups.google.com/d/optout.
>> >> >
>> >> > --
>> >> > Julien Cigar
>> >> > Belgian Biodiversity Platform (http://www.biodiversity.be)
>> >> > PGP fingerprint: EEF9 F697 4B68 D275 7B11  6A25 B2BB 3710 A204 23C0
>> >> > No trees were killed in the creation of this message.
>> >> > However, many electrons were terribly inconvenienced.
>> >> >
>> >> > --
>> >> > 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 post to this group, send email to [email protected].
>> >> > Visit this group at https://groups.google.com/group/sqlalchemy.
>> >> > For more options, visit https://groups.google.com/d/optout.
>> >>
>> >>
>> >>
>> >> --
>> >> Julien Cigar
>> >> Belgian Biodiversity Platform (http://www.biodiversity.be)
>> >> PGP fingerprint: EEF9 F697 4B68 D275 7B11  6A25 B2BB 3710 A204 23C0
>> >> No trees were killed in the creation of this message.
>> >> However, many electrons were terribly inconvenienced.
>> >>
>> >> --
>> >> 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 post to this group, send email to [email protected].
>> >> Visit this group at https://groups.google.com/group/sqlalchemy.
>> >> For more options, visit https://groups.google.com/d/optout.
>> >
>> >
>> >
>> > --
>> > Julien Cigar
>> > Belgian Biodiversity Platform (http://www.biodiversity.be)
>> > PGP fingerprint: EEF9 F697 4B68 D275 7B11  6A25 B2BB 3710 A204 23C0
>> > No trees were killed in the creation of this message.
>> > However, many electrons were terribly inconvenienced.
>> >
>> > --
>> > 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 post to this group, send email to [email protected].
>> > 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 the Google Groups 
>> "sqlalchemy" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected].
>> To post to this group, send email to [email protected].
>> Visit this group at https://groups.google.com/group/sqlalchemy.
>> For more options, visit https://groups.google.com/d/optout.
>
> --
> Julien Cigar
> Belgian Biodiversity Platform (http://www.biodiversity.be)
> PGP fingerprint: EEF9 F697 4B68 D275 7B11  6A25 B2BB 3710 A204 23C0
> No trees were killed in the creation of this message.
> However, many electrons were terribly inconvenienced.
>
> --
> 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 post to this group, send email to [email protected].
> 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 the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to