Hi Simon

Thanks for that - I knew it was something wrong with the approach but simply
could not pick it!    Back to the test bench for another go :-)

Cheers
Warwick

P.S.  OK - I have to ask - when and how (why?) do I do the .join on the
query? ;-)


On 5 October 2010 19:41, King Simon-NFHD78 <simon.k...@motorola.com> wrote:

> Warwick Prince wrote:
> >
> > Hi All
> >
> > I have what I hope is a very simple question;
> >
> > Just started experimenting with joins, so I tried a very basic test
> > and got a fail that I don't understand.  It appears that SA is
> > creating bad SQL, but I'm sure it's something I'm missing..  Here's
> > what I did;
> >
> > I have two tables.  products and product_prices.  There is a one to
> > many relationship based on Foreign Keys of Group and Code   Both
> > tables have columns Group and Code and they are also the primary of
> > each.
> >
> > I do this;
> >
> > e = an Engine (MySQL connector)
> > m = MetaData(e)
> >
> > prod = Table('products', m, autoload=True)
> > price = Table('product_prices, m, autoload=True
> > # These tables are both fine and load correctly
> >
> > # I want to build up my query generatively, so..
> >
> > # Note that I'm selecting specific columns, and both sets of Foreign
> > Keys are in the selected columns (not that I believe I should need to
> > do that)
> > q = prod.select().with_only_columns(['products.Group',
> > 'products.Code', 'product_prices.Group', 'product_prices.Code',
> > 'product_prices.ListPriceEx', 'product_prices.ListPriceInc'])
> >
> > q = q.join(price)
> >
> > # I get this error;
> > ArgumentError: Can't find any foreign key relationships between
> > 'Select object' and 'product_prices'.    (They do exists BTW)
> >
> > So, I remove my .with_only_columns and try again
> >
> > q = prod.select()
>
>
> Here you are creating a Select object (ie "SELECT <all columns> FROM
> products")
>
>
> >
> > q = q.join(price)
> >
>
> Now you are joining that Select object with another table
>
> ie. (SELECT <all columns> FROM products) JOIN price ON <join condition>
>
> The extra parentheses are there because you are joining a SELECT with a
> table.
>
> Instead, you want to join the tables together:
>
>  prod.join(price)
>
> To select from that, you can use the standalone select function:
>
> http://www.sqlalchemy.org/docs/core/expression_api.html#sqlalchemy.sql.e
> xpression.select
>
> eg.
>
> select([products.c.Group, products.c.Code, price.c.ListPriceEx],
>       from_obj=[prod.join(price)])
>
> Hope that helps,
>
> Simon
>
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To post to this group, send email to sqlalch...@googlegroups.com.
> To unsubscribe from this group, send email to
> sqlalchemy+unsubscr...@googlegroups.com<sqlalchemy%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://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 sqlalch...@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to