Another issue with the same setup:

node = query.select_by(name='konsole19.xx.xxxx.com')[0]
print query.select_by(console=node)

The debugging output shows this:

INFO:sqlalchemy.engine.base.Engine.0x..74:SELECT node.cport AS node_cport,
node.type_id AS node_type_id, node.locshelf AS node_locshelf, node.s_time AS
node_s_time, node.site_id AS node_site_id, node.console_id AS
node_console_id, node.locside AS node_locside, node.locarea AS node_locarea,
node.netswitch_id AS node_netswitch_id, node.bmodule2 AS node_bmodule2,
node.sport AS node_sport, node.node_id AS node_node_id, node.bplug AS
node_bplug, node.bmodule AS node_bmodule, node.parent_id AS node_parent_id,
node.os_id AS node_os_id, node.bport2 AS node_bport2, node.backplane AS
node_backplane, node.prop_id AS node_prop_id, node.status AS node_status,
node.model_id AS node_model_id, node.locrow AS node_locrow, node.serialno AS
node_serialno, node.bootbox2_id AS node_bootbox2_id, node.m_time AS
node_m_time, node.ytag AS node_ytag, node.bplug2 AS node_bplug2,
node.loccage AS node_loccage, node.ponumber AS node_ponumber, node.name AS
node_name, node.racksize AS node_racksize, node.bootbox_id AS
node_bootbox_id, node.locroom AS node_locroom, node.notes AS node_notes,
node.bport AS node_bport, node.locrack AS node_locrack, node.c_time AS
node_c_time, node.pdu AS node_pdu
FROM node
WHERE (node.node_id = ?) AND node.console_id = node.node_id ORDER BY
node.oid

It works when I say instead
print query.select_by(console_id=node.id)

Shouldn't sqlalchemy be able to construct the right SQL from the primaryjoin
condition specified in the mapper
for 'console' ?

/kk


This

On 3/27/07, Karthik Krishnamurthy <[EMAIL PROTECTED]> wrote:
>
> It works after I specify primary_key in my mapper or allow_null_pks, but
> not if I specify
> the column as primary_key in the Table() constructor.
>
> Thanks
> /kk
>
> On 3/26/07, Michael Bayer <[EMAIL PROTECTED]> wrote:
> >
> >
> > i notice that neither your table DDL nor your mappers have any notion
> > of a primary key, so thats not the complete application...whats below
> > will throw an error immediately.
> >
> > but the most likely cause for what youre seeing is that if any
> > element of the primary key in a result row is "None", no row will be
> > loaded.  this behavior can be changed using the "allow_null_pks"
> > option on your mapper.
> >
> >
> > On Mar 26, 2007, at 7:17 AM, Karthik Krishnamurthy wrote:
> >
> > >
> > > Hi,
> > >     I find that sqlalchemy isn't creating objects for certain rows.
> > >
> > > For example the following code gives me back an OpsDB.Node instance
> > > query.select_by(name=' konsole12.xx.xx.com')[0]
> > > whereas
> > > query.select_by(name='konsole23.xx.xxx.com')[0]
> > >
> > > I have provided below the debugging output gotten by setting
> > > sqlalchemy.engine and sqlalchemy.orm at DEBUG, the table schema and
> > > the code that defines the table and the mapper for the said table.
> > >
> > > /kk
> > >
> > > DEBUG info
> > > =======================================================
> > > INFO:sqlalchemy.engine.base.Engine.0x..74:SELECT node.cport AS
> > > node_cport, node.type_id AS node_type_id, node.locshelf AS
> > > node_locshelf, node.s_time AS node_s_time, node.site_id AS
> > > node_site_id, node.console_id AS node_console_id, node.locside AS
> > > node_locside, node.locarea AS node_locarea, node.netswitch_id AS
> > > node_netswitch_id, node.bmodule2 AS node_bmodule2, node.sport AS
> > > node_sport, node.node_id AS node_node_id, node.bplug AS node_bplug,
> > > node.bmodule AS node_bmodule, node.parent_id AS node_parent_id,
> > > node.os_id AS node_os_id, node.bport2 AS node_bport2, node.backplane
> > > AS node_backplane, node.prop_id AS node_prop_id, node.status AS
> > > node_status, node.model_id AS node_model_id, node.locrow AS
> > > node_locrow, node.serialno AS node_serialno, node.bootbox2_id AS
> > > node_bootbox2_id, node.m_time AS node_m_time, node.ytag AS node_ytag,
> > > node.bplug2 AS node_bplug2, node.loccage AS node_loccage,
> > > node.ponumber AS node_ponumber, node.name AS node_name, node.racksize
> > > AS node_racksize, node.bootbox_id AS node_bootbox_id, node.locroom AS
> > > node_locroom, node.notes AS node_notes, node.bport AS node_bport,
> > > node.locrack AS node_locrack, node.c_time AS node_c_time, node.pdu AS
> > > node_pdu
> > > FROM node
> > > WHERE node.name = ? ORDER BY node.oid
> > > INFO:sqlalchemy.engine.base.Engine.0x..74:['konsole19.xx.xxxx.com']
> > > DEBUG:sqlalchemy.orm.query.Query:instances()
> > > DEBUG:sqlalchemy.engine.base.Engine.0x..74:Row (30021, 106, 2, 2006,
> > > 91, 106822, u'a', u'E', None, 0, 0, 106818, 0, 0, None, None, 0, u'',
> > > 73, u'active', 179, u'19', u'TES113830', None, u'2006-11-30 19:31:28',
> > > u'126785', 0, 0, u'', u'konsole19.xx.xxxx.com ', 1, None, 0, u'', 0,
> > 1,
> > > 1135015620, u'')
> > > DEBUG:sqlalchemy.orm.strategies.LazyLoader:set class-level lazy loader
> > > on [EMAIL PROTECTED]
> > > DEBUG:sqlalchemy.orm.strategies.LazyLoader:set class-level lazy loader
> > > on [EMAIL PROTECTED]
> > > DEBUG:sqlalchemy.orm.strategies.LazyLoader:set class-level lazy loader
> > > on [EMAIL PROTECTED]
> > > DEBUG:sqlalchemy.orm.strategies.LazyLoader:set class-level lazy loader
> > > on [EMAIL PROTECTED]
> > > DEBUG:sqlalchemy.orm.strategies.LazyLoader:set class-level lazy loader
> > > on [EMAIL PROTECTED]
> > > DEBUG:sqlalchemy.orm.strategies.LazyLoader:set class-level lazy loader
> > > on [EMAIL PROTECTED]
> > > DEBUG:sqlalchemy.orm.strategies.LazyLoader:set class-level lazy loader
> > > on [EMAIL PROTECTED]
> > > DEBUG:sqlalchemy.orm.strategies.LazyLoader:set class-level lazy loader
> > > on [EMAIL PROTECTED]
> > > DEBUG:sqlalchemy.orm.strategies.LazyLoader:set class-level lazy loader
> > > on [EMAIL PROTECTED]
> > > DEBUG:sqlalchemy.orm.strategies.LazyLoader:set class-level lazy loader
> > > on [EMAIL PROTECTED]
> > > DEBUG:sqlalchemy.orm.strategies.LazyLoader:set class-level lazy loader
> > > on [EMAIL PROTECTED]
> > > DEBUG:sqlalchemy.orm.strategies.LazyLoader:set class-level lazy loader
> > > on [EMAIL PROTECTED]
> > > DEBUG:sqlalchemy.orm.strategies.LazyLoader:set class-level lazy loader
> > > on [EMAIL PROTECTED]
> > > DEBUG:sqlalchemy.orm.strategies.LazyLoader:set class-level lazy loader
> > > on [EMAIL PROTECTED]
> > > DEBUG:sqlalchemy.orm.strategies.LazyLoader:set class-level lazy loader
> > > on [EMAIL PROTECTED]
> > > INFO:sqlalchemy.engine.base.Engine.0x..74:SELECT node.cport AS
> > > node_cport, node.type_id AS node_type_id, node.locshelf AS
> > > node_locshelf, node.s_time AS node_s_time, node.site_id AS
> > > node_site_id, node.console_id AS node_console_id, node.locside AS
> > > node_locside, node.locarea AS node_locarea, node.netswitch_id AS
> > > node_netswitch_id, node.bmodule2 AS node_bmodule2, node.sport AS
> > > node_sport, node.node_id AS node_node_id, node.bplug AS node_bplug,
> > > node.bmodule AS node_bmodule, node.parent_id AS node_parent_id,
> > > node.os_id AS node_os_id, node.bport2 AS node_bport2, node.backplane
> > > AS node_backplane, node.prop_id AS node_prop_id, node.status AS
> > > node_status, node.model_id AS node_model_id, node.locrow AS
> > > node_locrow, node.serialno AS node_serialno, node.bootbox2_id AS
> > > node_bootbox2_id, node.m_time AS node_m_time, node.ytag AS node_ytag,
> > > node.bplug2 AS node_bplug2, node.loccage AS node_loccage,
> > > node.ponumber AS node_ponumber, node.name AS node_name, node.racksize
> > > AS node_racksize, node.bootbox_id AS node_bootbox_id, node.locroom AS
> > > node_locroom, node.notes AS node_notes, node.bport AS node_bport,
> > > node.locrack AS node_locrack, node.c_time AS node_c_time, node.pdu AS
> > > node_pdu
> > > FROM node
> > > WHERE node.name = ? ORDER BY node.oid
> > > INFO:sqlalchemy.engine.base.Engine.0x..74:['konsole23.xx.xxxx.com']
> > > DEBUG:sqlalchemy.orm.query.Query:instances()
> > > DEBUG: sqlalchemy.engine.base.Engine.0x..74:Row (0, 106, 0, 2006, 71,
> > > None, u'a', u'', None, 0, 0, 107751, 0, 0, None, None, 0, u'', 73,
> > > u'active', 179, u'1', u'', None, u'2006-11-30 19:31:31', None, 0, 0,
> > > u'', u'konsole23.xx.xxxx.com', 1, None, 0, u'', 0, 1, 1135127145, u'')
> > > Traceback (most recent call last):
> > >   File "test1.py ", line 13, in ?
> > >     node = query.select_by(name='konsole23.ird.yahoo.com')[0]
> > > IndexError: list index out of range
> > >
> > > =======================================================
> > > The schema:
> > >
> > > =======================================================
> > > sqlite> .schema node
> > > CREATE TABLE node (
> > >         node_id integer(10) NOT NULL,
> > >         name VARCHAR(255),
> > >         ytag VARCHAR(32),
> > >         type_id integer(10),
> > >         status varchar(32) NOT NULL,
> > >         parent_id integer(10),
> > >         prop_id integer(10),
> > >         site_id integer(10),
> > >         backplane CHAR(1) NOT NULL,
> > >         model_id integer(10),
> > >         os_id integer(10),
> > >         serialno VARCHAR(32) NOT NULL,
> > >         locroom integer(10) NOT NULL,
> > >         loccage integer(10) NOT NULL,
> > >         locarea VARCHAR(8) NOT NULL,
> > >         locrow CHAR(2) NOT NULL,
> > >         locrack integer(10) NOT NULL,
> > >         locside char(1) NOT NULL,
> > >         locshelf integer(3) NOT NULL,
> > >         racksize INTEGER(2),
> > >         bootbox_id integer(10),
> > >         bport integer(10) NOT NULL,
> > >         bmodule integer(10) NOT NULL,
> > >         bplug integer(10) NOT NULL,
> > >         bootbox2_id integer(10),
> > >         bport2 integer(10) NOT NULL,
> > >         bmodule2 integer(10) NOT NULL,
> > >         bplug2 integer(10) NOT NULL,
> > >         console_id integer(10),
> > >         cport integer(10) NOT NULL,
> > >         netswitch_id integer(10),
> > >         sport integer(10) NOT NULL,
> > >         ponumber VARCHAR(32) NOT NULL,
> > >         notes TEXT NOT NULL,
> > >         pdu VARCHAR(255) NOT NULL,
> > >         c_time integer(10) NOT NULL,
> > >         m_time integer(14) NOT NULL,
> > >         s_time integer(10) NOT NULL,
> > >         UNIQUE (node_id),
> > >         UNIQUE (name),
> > >         UNIQUE (ytag));
> > > =======================================================
> > >
> > > code
> > > =======================================================
> > >         _nodeTable = self._nodeTable = Table(
> > >             'node', _metadata,
> > >             Column('prop_id', Integer,
> > > ForeignKey('property.prop_id')),
> > >             Column('site_id', Integer, ForeignKey('site.site_id')),
> > >             Column('os_id', Integer, ForeignKey('os.os_id' )),
> > >             Column('console_id', Integer, ForeignKey('node.node_id')),
> > >             Column('bootbox_id', Integer, ForeignKey('node.node_id')),
> > >             Column('bootbox2_id', Integer,
> > > ForeignKey('node.node_id')),
> > >             Column('netswitch_id', Integer,
> > > ForeignKey('node.node_id')),
> > >             Column('type_id', Integer,
> > > ForeignKey(' dictionary.dict_id')),
> > >             Column('model_id', Integer, ForeignKey('model.model_id')),
> > >             autoload=True
> > >         )
> > >
> > >         mapper(OpsDB.Node, self._nodeTable, properties={
> > >             'id': self._nodeTable.c.node_id,
> > >             'property': relation(OpsDB.Property, backref='nodes'),
> > >             'site': relation(OpsDB.Site, backref='nodes'),
> > >             'os': relation(OpsDB.OS, backref='nodes'),
> > >             'console': relation(
> > >                 OpsDB.Node,
> > >                 primaryjoin = _nodeTable.c.console_id ==
> > > _nodeTable.c.node_id,
> > >                 remote_side = [_nodeTable.c.node_id],
> > >                 backref = 'consoleNodes',
> > >             ),
> > >             'bootbox' : relation(
> > >                 OpsDB.Node,
> > >                 primaryjoin = _nodeTable.c.bootbox_id ==
> > > _nodeTable.c.node_id,
> > >                 remote_side=[_nodeTable.c.node_id],
> > >                 backref = 'bootboxNodes',
> > >             ),
> > >             'bootbox2' : relation(
> > >                 OpsDB.Node,
> > >                 primaryjoin = _nodeTable.c.bootbox2_id ==
> > > _nodeTable.c.node_id,
> > >                 remote_side=[_nodeTable.c.node_id],
> > >                 backref = 'bootbox2Nodes',
> > >             ),
> > >             'switch' : relation(
> > >                 OpsDB.Node,
> > >                 primaryjoin = _nodeTable.c.netswitch_id ==
> > > _nodeTable.c.node_id,
> > >                 remote_side=[_nodeTable.c.node_id],
> > >                 backref = 'switchNodes',
> > >             ),
> > >             'type' : relation(OpsDB.Dictionary , backref='typeNodes'),
> > >             'model' : relation(OpsDB.Dictionary,
> > > backref='modelNodes'),
> > >         })
> > >
> > >
> > > >
> >
> >
> > > >
> >
>

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

Reply via email to