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 ? :)

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 <julien.ci...@gmail.com> 
> > > 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 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 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.
> > 
> > -- 
> > 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 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.
> 
> 
> 
> -- 
> 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 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.



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

Attachment: signature.asc
Description: PGP signature

Reply via email to