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.

Reply via email to