Re: [sqlalchemy] allow_partial_pks=False goes to database on partial pk
just put up a new ticket, i dont really have time to attend to these right now. you're right we'd probably move the partial pk's check to the ultimate call that un-expires things. On May 10, 2010, at 5:21 PM, Kent wrote: See this script, running 0.6.0: == from sqlalchemy import * from sqlalchemy.orm import * engine = create_engine('oracle://user:passw...@localhost:1521/xe? use_ansi=False',echo=True) metadata = MetaData() Session = sessionmaker(bind=engine) session = Session() order_table = Table(orders, metadata, Column(orderid, Unicode, primary_key=True) ) orderdetail_table = Table(orderdetails,metadata, Column(orderid, Unicode, ForeignKey('orders.orderid'), primary_key=True), Column(lineid, Integer, primary_key=True), Column(saleprice, Numeric, nullable=False) ) class Order(object): pass class OrderDetail(object): pass order_mapper = mapper(Order, order_table, properties=dict(orderdetails=relation(OrderDetail, cascade='all,delete-orphan', single_parent=True, lazy=False, backref=backref('parentorder', cascade='refresh-expire,expunge' orderdetail_mapper = mapper(OrderDetail, orderdetail_table, allow_partial_pks=False) o=Order() o.orderid = u'SALE000' # not in database line=OrderDetail() line.lineid = 1 # not in database o.orderdetails = [line] merged=session.merge(o) merged.orderdetails[0].saleprice # referencing this, with allow_partial_pks=False should not go to database == Following is the pasted output, starting with merge(): merged=session.merge(o) 2010-05-06 09:44:49,648 INFO sqlalchemy.engine.base.Engine.0x...5790 SELECT USER FROM DUAL 2010-05-06 09:44:49,652 INFO sqlalchemy.engine.base.Engine.0x...5790 {} 2010-05-06 09:44:49,656 INFO sqlalchemy.engine.base.Engine.0x...5790 BEGIN 2010-05-06 09:44:49,657 INFO sqlalchemy.engine.base.Engine.0x...5790 SELECT orders.orderid AS orders_orderid, orderdetails_1.orderid AS orderdetails_1_orderid, orderdetails_1.lineid AS orderdetails_1_lineid, orderdetails_1.saleprice AS orderdetails_1_saleprice FROM orders, orderdetails orderdetails_1 WHERE orders.orderid = :param_1 AND orders.orderid = orderdetails_1.orderid(+) 2010-05-06 09:44:49,657 INFO sqlalchemy.engine.base.Engine.0x...5790 {'param_1': u'SALE000'} merged.orderdetails[0].saleprice # referencing this, with allow_partial_pks=False should not go to database 2010-05-06 09:44:49,664 INFO sqlalchemy.engine.base.Engine.0x...5790 SELECT orderdetails.saleprice AS orderdetails_saleprice FROM orderdetails WHERE orderdetails.orderid IS NULL AND orderdetails.lineid = :param_1 2010-05-06 09:44:49,664 INFO sqlalchemy.engine.base.Engine.0x...5790 {'param_1': 1} I think this is related to the ticket 1789 in that saleprice shouldn't have been expired on a pending instance anyway. However, I wanted to report this because it seems to me there is *also* potentially something broken with allow_partial_pks=False in that, regardless of the expired status, I would have expected the query to not be issued with a pk that is partially None. Thanks in advance. -- 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. -- 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.
Re: [sqlalchemy] allow_partial_pks=False goes to database on partial pk
http://www.sqlalchemy.org/trac/ticket/1797 On 5/11/2010 9:50 AM, Michael Bayer wrote: just put up a new ticket, i dont really have time to attend to these right now. you're right we'd probably move the partial pk's check to the ultimate call that un-expires things. On May 10, 2010, at 5:21 PM, Kent wrote: See this script, running 0.6.0: == from sqlalchemy import * from sqlalchemy.orm import * engine = create_engine('oracle://user:passw...@localhost:1521/xe? use_ansi=False',echo=True) metadata = MetaData() Session = sessionmaker(bind=engine) session = Session() order_table = Table(orders, metadata, Column(orderid, Unicode, primary_key=True) ) orderdetail_table = Table(orderdetails,metadata, Column(orderid, Unicode, ForeignKey('orders.orderid'), primary_key=True), Column(lineid, Integer, primary_key=True), Column(saleprice, Numeric, nullable=False) ) class Order(object): pass class OrderDetail(object): pass order_mapper = mapper(Order, order_table, properties=dict(orderdetails=relation(OrderDetail, cascade='all,delete-orphan', single_parent=True, lazy=False, backref=backref('parentorder', cascade='refresh-expire,expunge' orderdetail_mapper = mapper(OrderDetail, orderdetail_table, allow_partial_pks=False) o=Order() o.orderid = u'SALE000' # not in database line=OrderDetail() line.lineid = 1 # not in database o.orderdetails = [line] merged=session.merge(o) merged.orderdetails[0].saleprice # referencing this, with allow_partial_pks=False should not go to database == Following is the pasted output, starting with merge(): merged=session.merge(o) 2010-05-06 09:44:49,648 INFO sqlalchemy.engine.base.Engine.0x...5790 SELECT USER FROM DUAL 2010-05-06 09:44:49,652 INFO sqlalchemy.engine.base.Engine.0x...5790 {} 2010-05-06 09:44:49,656 INFO sqlalchemy.engine.base.Engine.0x...5790 BEGIN 2010-05-06 09:44:49,657 INFO sqlalchemy.engine.base.Engine.0x...5790 SELECT orders.orderid AS orders_orderid, orderdetails_1.orderid AS orderdetails_1_orderid, orderdetails_1.lineid AS orderdetails_1_lineid, orderdetails_1.saleprice AS orderdetails_1_saleprice FROM orders, orderdetails orderdetails_1 WHERE orders.orderid = :param_1 AND orders.orderid = orderdetails_1.orderid(+) 2010-05-06 09:44:49,657 INFO sqlalchemy.engine.base.Engine.0x...5790 {'param_1': u'SALE000'} merged.orderdetails[0].saleprice # referencing this, with allow_partial_pks=False should not go to database 2010-05-06 09:44:49,664 INFO sqlalchemy.engine.base.Engine.0x...5790 SELECT orderdetails.saleprice AS orderdetails_saleprice FROM orderdetails WHERE orderdetails.orderid IS NULL AND orderdetails.lineid = :param_1 2010-05-06 09:44:49,664 INFO sqlalchemy.engine.base.Engine.0x...5790 {'param_1': 1} I think this is related to the ticket 1789 in that saleprice shouldn't have been expired on a pending instance anyway. However, I wanted to report this because it seems to me there is *also* potentially something broken with allow_partial_pks=False in that, regardless of the expired status, I would have expected the query to not be issued with a pk that is partially None. Thanks in advance. -- 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. -- 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.
[sqlalchemy] allow_partial_pks=False goes to database on partial pk
See this script, running 0.6.0: == from sqlalchemy import * from sqlalchemy.orm import * engine = create_engine('oracle://user:passw...@localhost:1521/xe? use_ansi=False',echo=True) metadata = MetaData() Session = sessionmaker(bind=engine) session = Session() order_table = Table(orders, metadata, Column(orderid, Unicode, primary_key=True) ) orderdetail_table = Table(orderdetails,metadata, Column(orderid, Unicode, ForeignKey('orders.orderid'), primary_key=True), Column(lineid, Integer, primary_key=True), Column(saleprice, Numeric, nullable=False) ) class Order(object): pass class OrderDetail(object): pass order_mapper = mapper(Order, order_table, properties=dict(orderdetails=relation(OrderDetail, cascade='all,delete-orphan', single_parent=True, lazy=False, backref=backref('parentorder', cascade='refresh-expire,expunge' orderdetail_mapper = mapper(OrderDetail, orderdetail_table, allow_partial_pks=False) o=Order() o.orderid = u'SALE000' # not in database line=OrderDetail() line.lineid = 1 # not in database o.orderdetails = [line] merged=session.merge(o) merged.orderdetails[0].saleprice # referencing this, with allow_partial_pks=False should not go to database == Following is the pasted output, starting with merge(): merged=session.merge(o) 2010-05-06 09:44:49,648 INFO sqlalchemy.engine.base.Engine.0x...5790 SELECT USER FROM DUAL 2010-05-06 09:44:49,652 INFO sqlalchemy.engine.base.Engine.0x...5790 {} 2010-05-06 09:44:49,656 INFO sqlalchemy.engine.base.Engine.0x...5790 BEGIN 2010-05-06 09:44:49,657 INFO sqlalchemy.engine.base.Engine.0x...5790 SELECT orders.orderid AS orders_orderid, orderdetails_1.orderid AS orderdetails_1_orderid, orderdetails_1.lineid AS orderdetails_1_lineid, orderdetails_1.saleprice AS orderdetails_1_saleprice FROM orders, orderdetails orderdetails_1 WHERE orders.orderid = :param_1 AND orders.orderid = orderdetails_1.orderid(+) 2010-05-06 09:44:49,657 INFO sqlalchemy.engine.base.Engine.0x...5790 {'param_1': u'SALE000'} merged.orderdetails[0].saleprice # referencing this, with allow_partial_pks=False should not go to database 2010-05-06 09:44:49,664 INFO sqlalchemy.engine.base.Engine.0x...5790 SELECT orderdetails.saleprice AS orderdetails_saleprice FROM orderdetails WHERE orderdetails.orderid IS NULL AND orderdetails.lineid = :param_1 2010-05-06 09:44:49,664 INFO sqlalchemy.engine.base.Engine.0x...5790 {'param_1': 1} I think this is related to the ticket 1789 in that saleprice shouldn't have been expired on a pending instance anyway. However, I wanted to report this because it seems to me there is *also* potentially something broken with allow_partial_pks=False in that, regardless of the expired status, I would have expected the query to not be issued with a pk that is partially None. Thanks in advance. -- 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.