Hi!

On Wed, Jun 24, 2015 at 04:13:21PM +0000, Taia Modlin <taia.mod...@yahoo.com> 
wrote:
> Hello,
> I was wondering if it is possible to filter a table based on a field from 
> it's foreign key.
> Thanks

   There are two ways: simple and efficient. Let's see an example:

from sqlobject import *

__connection__ = "sqlite:/:memory:?debug=1&debugOutput=1"

class Test1(SQLObject):
    name = StringCol()

class Test2(SQLObject):
    name = StringCol()
    test1 = ForeignKey("Test1")

Test1.createTable()
Test2.createTable()

test1 = Test1(name="one")
test2 = Test2(name="One", test1=test1)

test1 = Test1(name="two")
test2 = Test2(name="Two", test1=test1)

# Simple way: run through all rows
for row in Test2.select():
    if row.test1.name == "one":
        print row.name

# Efficient way: do join
for row in Test2.select((Test2.q.test1==Test1.q.id) & (Test1.q.name=="one")):
    print row

   The join produces the following SQL:

SELECT test2.id, test2.name, test2.test1_id FROM test1, test2 WHERE 
(((test2.test1_id) = (test1.id)) AND ((test1.name) = ('one')))

   The advantage of join is efficiency, the disadvantage is that you
have to write it manually even if SQLObject has got enough information
to do it for you.

   See also a short note on using .throughTo magic attribute:

http://sqlobject.org/SelectResults.html#throughto-join-name-and-throughto-foreign-key-name

   but it doesn't apply to my example.

Oleg.
-- 
     Oleg Broytman            http://phdru.name/            p...@phdru.name
           Programmers don't die, they just GOSUB without RETURN.

------------------------------------------------------------------------------
Monitor 25 network devices or servers for free with OpManager!
OpManager is web-based network management software that monitors 
network devices and physical & virtual servers, alerts via email & sms 
for fault. Monitor 25 devices for free with no restriction. Download now
http://ad.doubleclick.net/ddm/clk/292181274;119417398;o
_______________________________________________
sqlobject-discuss mailing list
sqlobject-discuss@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss

Reply via email to