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() --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---