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.
signature.asc
Description: PGP signature