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.
