Hi Desmond. I don't really understand your table structure. Could you present it in the form of a standalone script that we can run (including sample data)?
Thanks, Simon On Mon, Jun 10, 2019 at 2:57 AM Desmond Lim <limwen...@gmail.com> wrote: > > Hi there, > > I really have no idea how to do this via sqlalchemy. I have 2 tables: > > class NodesModel(db.Model): > __tablename__ = 'nodes' > > id = db.Column(db.BigInteger, primary_key=True) > topic = db.Column(db.String(20), nullable=False) > > pn = relationship("PNModel", backref="nodes") > > class PNModel(db.Model): > __tablename__ = 'pn' > > post_id = db.Column(db.BigInteger, db.ForeignKey('posts.id'), > primary_key=True) > node_id = db.Column(db.BigInteger, db.ForeignKey('nodes.id'), > primary_key=True) > > > I will get a list of nodes that have the topic (e.g. one, two). Then taking > the nodes, I'll select the PN that have both nodes (it can be 1 or more) > associated with it. > > e.g. > > > > I'm doing it this way at this point: > > nodes = NodesModel.find_by_topic_list(topic_list) > node_id_list = [node.id for node in nodes] > > Then running this sql statement: > WITH pn_1 AS (SELECT post_id, ARRAY_AGG(DISTINCT node_id) AS nodes > FROM pn GROUP BY post_id), > nodes_1 AS (SELECT ARRAY_AGG(DISTINCT id) AS s_nodes > FROM pn WHERE node_id IN (dict(node_id_list)) > SELECT DISTINCT post_id FROM pn_1 > WHERE nodes_1 = (SELECT s_nodes FROM select_nodes); > > There has to be a better and more elegant way to do this with SQLAlchemy and > I can't seem to figure it out. I've tried using subqueries and then I > realised that I'm actually calling the nodes table twice, which I shouldn't > have to. > > Can anyone tell me how to use the nodes table to get the post_id form pn > (after which getting the post should be easy via ORM should be easy, I think). > > Thanks. > Desmond > > -- > 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. > To view this discussion on the web visit > https://groups.google.com/d/msgid/sqlalchemy/CAM%2BCzahgN2TF88p4__5W76DiYO3THD1tV2BgekvX913Mv6nU7Q%40mail.gmail.com. > 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. To view this discussion on the web visit https://groups.google.com/d/msgid/sqlalchemy/CAFHwexcmpOTTms0-A9QbiT_DTQey8e-Wzze4W5HoDXZdZ7eJWA%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.