Brilliant. Thanks for that lightning response, workaround and fix. I'll give the code a spin.
On 28 Jan, 23:19, Michael Bayer <[EMAIL PROTECTED]> wrote: > hi there - > > the bug is fixed in r4103, the test below will work as stated. Or you > can stick with the workaround for now. > > On Jan 28, 2008, at 4:03 PM, Phil Coombs wrote: > > > > > > > Hi > > > I'm a Python and SA newbie investigating SA for a project using > > Postgres. I have a database schema that I want to point SA at then be > > able to write my Python code. > > > I'm working with a version of the basic_association example to keep > > things simple. I want to have unique auto generated ids on my tables > > (surrogate primary keys) but also want to have primary keys defined > > over the entities' actual attributes. I want to have surrogate keys on > > my tables so that I can use them instead of the full priamary keys > > when writing joins to keep the SQL brief. In some cases (e.g. the > > association table) I'm defining the primary key in terms of surrogate > > primary keys rather than copy over the full primary key from the > > associated tables. > > > When I run the code (below) I get AttributeError: 'Order' object has > > no attribute '_instance_key'. > > > Please can someone help me setup SA to work in this example? > > > Thanks in advance > > > Phil > > > Postgress DDL > > ---------------------- > > create table orders ( > > order_id Serial , > > o_customer_name text not null, > > o_order_date timestamp not null, > > primary key (o_customer_name, o_order_date) using index ,unique > > (order_id); > > > create table items ( > > item_id Serial , > > it_description text not null, > > it_price Numeric(8,2) not null, > > primary key (it_description) using index, unique (item_id) using > > index); > > > create table order_items ( > > oi_order_id Integer not null, > > oi_item_id Integer not null, > > oi_price Numeric(8,2) not null, > > primary key (oi_order_id, oi_item_id) using index); > > > Python > > ---------- > > [SNIP] setup and connect string > > > engine = create_engine(connectString, echo=False) > > metadata = MetaData(engine) > > > orders_table = Table('orders', metadata, autoload=True) > > items_table = Table('items', metadata, autoload=True) > > orderitems_table = Table('order_items', metadata, > > Column('oi_order_id', Integer, > > ForeignKey('orders.order_id'), > > primary_key=True), > > Column('oi_item_id', Integer, > > ForeignKey('items.item_id'), > > primary_key=True), > > autoload=True > > ) > > > class Order(object): > > def __init__(self, customer_name, order_date): > > self.customer_name = customer_name > > self.order_date = order_date > > > class Item(object): > > def __init__(self, description, price): > > self.description = description > > self.price = price > > > class OrderItem(object): > > def __init__(self, item, price=None): > > self.item = item > > self.price = price or item.price > > > mapper(Order, orders_table, properties = { > > 'id' : orders_table.c.order_id, > > 'customer_name' : orders_table.c.o_customer_name, > > 'order_date' : orders_table.c.o_order_date, > > 'order_items' : relation(OrderItem) > > }) > > > mapper(Item, items_table, properties = { > > 'id' : items_table.c.item_id, > > 'description' : items_table.c.it_description, > > 'price' : items_table.c.it_price > > }) > > > mapper(OrderItem, orderitems_table, properties = { > > 'order_id' : orderitems_table.c.oi_order_id, > > 'item_id' : orderitems_table.c.oi_item_id, > > 'price' : orderitems_table.c.oi_price, > > 'item' : relation(Item) > > }) > > > Session = sessionmaker(bind=engine, autoflush=True, > > transactional=True) > > session = Session() > > > session.save(Item('Item A', 10.99)) > > session.save(Item('Item B', 8)) > > session.save(Item('Item C', 4)) > > session.save(Item('Item D', 1)) > > session.flush() > > > def item(name): > > return session.query(Item).filter_by(description=name).one() > > > order = Order("cust1", datetime.now()) > > order.order_items.append(OrderItem(item('Item A'))) > > order.order_items.append(OrderItem(item('Item B'),10)) > > order.order_items.append(OrderItem(item('Item C'))) > > > session.save(order) > > session.commit()- Hide quoted text - > > - Show quoted text - --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com 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 -~----------~----~----~----~------~----~------~--~---