Az wrote: [SNIP] > > The following code maps these classes to respective database tables. > > > # SQLAlchemy database transmutation > engine = create_engine('sqlite:///:memory:', echo=False) > metadata = MetaData() > > customers_table = Table('customers', metadata, > Column('uid', Integer, primary_key=True), > Column('name', String), > Column('email', String) > ) > > > orders_table = Table('orders', metadata, > Column('item_id', Integer, primary_key=True), > Column('item_name', String), > Column('customer', Integer, ForeignKey('customers.uid')) > ) > > metadata.create_all(engine) > mapper(Customer, customers_table) > mapper(Orders, orders_table) > > > Now if I do something like: > > for order in session.query(Order): > print order > > I can get a list of orders in this form: > > Item ID 1001: MX4000 Laser Mouse, has been ordered by customer no. > 12 > > ========= > > What I want to do is find out customer 12's name and email address > (which is why I used the ForeignKey into the Customer table). How > would I go about it? > > ========= >
You need to add a "relationship" between the two classes. This is documented at http://www.sqlalchemy.org/docs/ormtutorial.html#building-a-relationship. The documentation is using the declarative form. If you want to continue to use the distinct table definitions followed by mapper definitions, it would look something like this: mapper(Orders, orders_table, properties={ 'customer_object': relationship(Customer, backref='orders') }) This will add a 'customer_object' property to the Orders class which returns the corresponding Customer object. The backref='orders' parameter means that the Customer object will also get an 'orders' property which will be a list of all orders owned by the Customer. You might find it more convenient if your existing 'customer' column was actually called something like 'customer_id', then you could call your relationship property 'customer' instead. If you didn't want to rename the actual column in the database, you can still ask SQLAlchemy to use a different name for the column, as demonstrated in http://www.sqlalchemy.org/docs/mappers.html#customizing-column-propertie s 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. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.