[sqlalchemy] one to may Commit

2011-01-15 Thread borisov
Hello.

A have this model.

How to make Order() and Orderitems() objects during one commit()

I'm trying

no = Order()
noi = Orderitem()
no.orderitems.append(noi)
Session.add(no)
Session.commit()

but get an error

IntegrityError: (IntegrityError) null value in column order_id
violates not-null constraint 'INSERT INTO

orders_table = Table('orders', metadata,
Column('id', types.Integer, primary_key=True, autoincrement=True),
Column('created', types.DateTime, default=now()),
)

orderitems_table = Table('orderitems', metadata,
Column('id', types.Integer, primary_key=True, autoincrement=True),
Column('order_id', types.Integer, ForeignKey('orders.id'),
nullable=False),
Column('sum', types.Float, default=0),
Column('created', types.DateTime, default=now()),
)

class Order(BaseModel):
pass

class Orderitem(BaseModel):
pass


mapper(Order, orders_table,
properties={'orderitems': relation(Orderitem, backref='order',
 
primaryjoin=orderitems_table.c.order_id==orders_table.c.id),
})
mapper(Orderitem, orderitems_table)

-- 
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 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.



Re: [sqlalchemy] one to may Commit

2011-01-15 Thread Michael Bayer
More information is needed.  Test case, psycopg2, SQLA 0.6.6, works fine:

from sqlalchemy import *
from sqlalchemy.orm import *

metadata= MetaData()

orders_table = Table('orders', metadata,
   Column('id', Integer, primary_key=True, autoincrement=True),
   Column('created', DateTime, default=func.now()),
)

orderitems_table = Table('orderitems', metadata,
   Column('id', Integer, primary_key=True, autoincrement=True),
   Column('order_id', Integer, ForeignKey('orders.id'),nullable=False),
   Column('sum', Float, default=0),
   Column('created', DateTime, default=func.now()),
)

class Order(object):
   pass

class Orderitem(object):
   pass


mapper(Order, orders_table,
   properties={
'orderitems': relation(Orderitem, backref='order',

primaryjoin=orderitems_table.c.order_id==orders_table.c.id),
   })
mapper(Orderitem, orderitems_table)

e = create_engine('postgresql://scott:tiger@localhost/test', echo=True)
metadata.drop_all(e)
metadata.create_all(e)
session = Session(e)

no = Order()
noi = Orderitem()
no.orderitems.append(noi)
session.add(no)
session.commit()


output of the commit:

BEGIN (implicit)
INSERT INTO orders (created) VALUES (now()) RETURNING orders.id
{}
INSERT INTO orderitems (order_id, sum, created) VALUES (%(order_id)s, %(sum)s, 
now()) RETURNING orderitems.id
{'order_id': 1, 'sum': 0}
COMMIT


On Jan 15, 2011, at 4:02 AM, borisov wrote:

 Hello.
 
 A have this model.
 
 How to make Order() and Orderitems() objects during one commit()
 
 I'm trying
 
 no = Order()
 noi = Orderitem()
 no.orderitems.append(noi)
 Session.add(no)
 Session.commit()
 
 but get an error
 
 IntegrityError: (IntegrityError) null value in column order_id
 violates not-null constraint 'INSERT INTO
 
 orders_table = Table('orders', metadata,
Column('id', types.Integer, primary_key=True, autoincrement=True),
Column('created', types.DateTime, default=now()),
 )
 
 orderitems_table = Table('orderitems', metadata,
Column('id', types.Integer, primary_key=True, autoincrement=True),
Column('order_id', types.Integer, ForeignKey('orders.id'),
 nullable=False),
Column('sum', types.Float, default=0),
Column('created', types.DateTime, default=now()),
 )
 
 class Order(BaseModel):
pass
 
 class Orderitem(BaseModel):
pass
 
 
 mapper(Order, orders_table,
properties={'orderitems': relation(Orderitem, backref='order',
 
 primaryjoin=orderitems_table.c.order_id==orders_table.c.id),
})
 mapper(Orderitem, orderitems_table)
 
 -- 
 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 
 sqlalchemy+unsubscr...@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 sqlalchemy@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.