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