Also, it is feasible (or likely even) that the relation I am attempting to query is already persistent in the session. Is .get() the only function that attempts to find an unexpired persistent instance before going to the database?
Will doing a session.query().filter() also check if the object is persistent before querying the database (doubt that's possible?)? On Feb 26, 3:23 pm, Kent <[email protected]> wrote: > It *sounds* like exactly what I'm looking for, but when I try a simple > example, it doesn't seem to work: > > > > >>> ol=OrderDetail() > >>> ol.productid = 'DININGCHAIR' > >>> DBSession.query(Product).with_parent(ol).all() > > 15:21:57,688 INFO [sqlalchemy.engine.base.Engine.0x...d3d0] BEGIN > 15:21:57,694 INFO [sqlalchemy.engine.base.Engine.0x...d3d0] SELECT > products.productid AS products_productid, products.brand AS > products_brand, products.vendorsku AS products_vendorsku, > products.stockeditem AS products_stockeditem, > products.packagesplittype AS products_packagesplittype, > products.packagecomponent AS products_packagecomponent, > products.productgroup AS products_productgroup, products.productfamily > AS products_productfamily, products.productsubfamily AS > products_productsubfamily, products.description AS > products_description, products.regular AS products_regular, > products.commissiontype AS products_commissiontype, > products.replacementcost AS products_replacementcost, products.sale AS > products_sale, products.onhand AS products_onhand, products.onorder AS > products_onorder, products.imageurl AS products_imageurl, > products.special AS products_special, products.featured AS > products_featured, products.newproduct AS products_newproduct > FROM products > WHERE products.productid = %(param_1)s > 15:21:57,694 INFO [sqlalchemy.engine.base.Engine.0x...d3d0] > {'param_1': None} > [] > > > > I had expected the bind variable param_1 to equal the fk of > 'DININGCHAIR' > > What am I missing? > > On Feb 26, 2:50 pm, Michael Bayer <[email protected]> wrote: > > > On Feb 26, 2010, at 1:48 PM, Kent wrote: > > > > I'm certain sqlalchemy's got a function call in its guts that I was > > > about to recreate from scratch, so I'm hoping you can spare me the > > > trouble. > > > > I'm trying to construct the foreign key where clause and from clause > > > needed to populate a relation. > > > > I'd explain how I got here, but might take several days, so instead, > > > is there a function call to help me? > > > > In other words, I've got an object, for example an order: > > > > =================================== > > > > orderdetail_table = Table("orderdetails",metadata, > > > Column("orderid", Unicode, ForeignKey('orders.orderid'), > > > primary_key=True), > > > Column("lineid", Integer, primary_key=True), > > > Column("saleprice", Numeric, nullable=False), > > > Column("productid", Unicode(255), > > > ForeignKey('products.productid'), nullable=False) > > > ) > > > > product_table = Table("products", metadata, > > > Column("productid", Unicode(255), primary_key=True), > > > Column("brand", Unicode(255), > > > ... > > > ) > > > > class Order(object): > > > pass > > > > class OrderDetail(object): > > > pass > > > > # ---------------------------- OrderDetail > > > -------------------------------------------------------- # > > > orderdetail_mapper = mapper(OrderDetail, orderdetail_table, > > > allow_null_pks=False, > > > properties=dict(product=relation(Product, > > > cascade='refresh-expire,expunge', #don't save > > > changes to Product > > > lazy=False))) > > > > ===================== > > > > Say the 'product' relation is not populated on a *transient* > > > OrderDetail object that I will not be issuing a session flush() for > > > (there are errors detected.. but that's the long story). > > > > I want to populate the transient OrderDetails 'product' attribute with > > > the detached product. > > > > I assume there is no way a refresh of the 'product' attribute will > > > accomplish this since the parent obj is transient (which would really > > > be what I want), so I am also assuming I'll need to build the pk > > > clause and issue a session.query.get(). > > > > Since this is dynamic code (accepting any sqla object), I need to > > > dynamically construct that pk clause and from clause based on the > > > mapper's RelationProperty. In other words, use _foreign_keys to > > > construct this ? > > > > But I imagine there is already a function call that will get me what I > > > want. > > > > In the end, for this example, I'd want to dynamically build > > > session.query(Product).filter( * pk clause based on fks *) > > > > Is there a function that can get me most everything I want (return the > > > pk clause) or must I build that up myself, and if myself, do you > > > recommend the RelationProperty's _foreign_keys attribute as the > > > starting point? > > > > Thanks in advance, again. > > > are you perhaps looking for sess.query(Product).with_parent(someorder) ? > > there's an example here: > > http://www.sqlalchemy.org/docs/mappers.html#building-query-enabled-pr... > > > > -- > > > You received this message because you are subscribed to the Google Groups > > > "sqlalchemy" group. > > > To post to this group, send email to [email protected]. > > > To unsubscribe from this group, send email to > > > [email protected]. > > > For more options, visit this group > > > athttp://groups.google.com/group/sqlalchemy?hl=en. > > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
