Hi list,

I am using a mssql database.

A mapper that was working in 0.3.4, no longer works in 0.3.6,

The query built is apparently the same, but the values used as
parameters are not the same.

Under 0.3.4 it was
      INFO sqlalchemy.engine.base.Engine.0x..d0 {'lazy_fa2e': 'xxxxx',
'MakerCost_MakerCost': '0', 'MakerCost_Effective_Date': '2007-04-04'}

Under 03.6 it has become
       INFO sqlalchemy.engine.base.Engine.0x..d0
{'MakerCost_MakerCost': None, 'lazy_e4bf': 'xxxxx',
'MakerCost_Effective_Date': '2007-04-04 00:00'}

As you can see MakerCost has become None instead of 0 (zero) and the
Date has turned into a Datetime. Note that the 0 (zero) is explicitly
specified in a query.

What is going on? Any pointer appreciated.


TIA
        François

Here are the gruesome details

The MakerCost  table associate the Maker and the Model tables. It also
has a "Cost" and a "Date" fields.

The mapped "Cost" property retrieves only the "current" cost. It is
when using the "Cost" property  that the problem occurs (In the info
above, the "Cost" property on a "Maker" object)


tblMaker=Table("Maker",
        Column("MAKERCODE",StripString, primary_key = True),
        Column("NAME" , CP874String,nullable=False),
        Column("ADDR0",String(40),nullable=True),
        Column("ADDR1",String(40),nullable=True),
        Column("ADDR2",String(40),nullable=True),
        Column("ADDR3",String(40),nullable=True),
        Column("TBCODE",String,nullable=False),
        Column("CONTACT",String,nullable=False),
        Column("COMMENTS",String),
        Column("DSTAMP",DateTime),
        Column("USERNAME",String(8)))

tblModel=Table("Model",
        Column("ModelCode",CodeString(20), primary_key = True),
        Column("ModelGroup",String(12),nullable=False),
        Column("ModelThaiName",CP874String(50),nullable=False),
        Column("ModelEnglishName",StripString(50),nullable=False),
        Column("ModelWeight",Float),
        Column("UnitCode",String(5)),
        #Column("ProductGroupCode",ForeignKey("... TODO
        Column("ModelRemark",CP874String(50)),
        Column("EffectDate",Date),
        Column("LastDate",DateTime),
        Column("LastUser",String(8)))

tblMakerCost=Table("MakerCost",
        Column("RowOrder",Integer, primary_key = True),
        Column("MakerCode" , StripString(50),ForeignKey("Maker.MAKERCODE")),
        Column("ModelCode" , CodeString,ForeignKey("Model.ModelCode")),
        Column("MakerCost",Float,nullable=False),
        Column("Remark",CP874String(100)),
        Column("Reference",CP874String()),
        Column("Effective_Date",Date),
        Column("LastUpdate",DateTime),
        Column("LastUser",String(8)))


MakerCost.mapper["Primary"]=mapper(MakerCost,tblMakerCost,
properties={
        'Cost': tblMakerCost.c.MakerCost,
        'id':tblMakerCost.c.RowOrder,
        }
)

#Getting only the latest costs
sCCSub=select([tblMakerCost.c.MakerCode, tblMakerCost.c.ModelCode,
func.max(tblMakerCost.c.Effective_Date).label('Effective_Date')],tblMakerCost.c.Effective_Date<=datetime.date.today(),group_by=[tblMakerCost.c.MakerCode,
tblMakerCost.c.ModelCode]).alias('sCCSub')

sCurrentCost=select([c for c in
tblMakerCost.c],tblMakerCost.c.MakerCost
>0,from_obj=[join(tblMakerCost,sCCSub,and_(sCCSub.c.MakerCode==tblMakerCost.c.MakerCode,and_(sCCSub.c.ModelCode==tblMakerCost.c.ModelCode,sCCSub.c.Effective_Date==tblMakerCost.c.Effective_Date)))]).alias('sCurrentCost')

Maker.mapper["Primary"]=mapper(Maker, tblMaker, properties={
        'AllCosts':relation(MakerCost, backref='Maker',lazy=True,
cascade="all, delete-orphan"),
        'Costs': relation(mapper(MakerCost,sCurrentCost, non_primary=True),
uselist=True, viewonly=True),
         #Models':
relation(Model,secondary=tblMakerCost,secondaryjoin=tblModel.c.ModelCode==tblMakerCost.c.ModelCode,
        
#primaryjoin=tblMaker.c.MAKERCODE==tblMakerCost.c.MakerCode,uselist=True,
viewonly=True),
        'Name':tblMaker.c.NAME,
        'Code':tblMaker.c.MAKERCODE,
        'Contact': tblMaker.c.CONTACT,
        'Comment': tblMaker.c.COMMENTS,
        'LastUpdate':tblMaker.c.DSTAMP,
        'LastUser':tblMaker.c.USERNAME
        }
)

Model.mapper["Primary"]=mapper(Model,tblModel, properties={
        'AllCosts':relation(MakerCost,backref='Model',lazy=True,
cascade="all, delete-orphan"),
        'Costs': relation(mapper(MakerCost,sCurrentCost, non_primary=True),
uselist=True, viewonly=True),
        'Makers':
relation(Maker,secondary=tblMakerCost,primaryjoin=tblModel.c.ModelCode==tblMakerCost.c.ModelCode,
        
secondaryjoin=tblMaker.c.MAKERCODE==tblMakerCost.c.MakerCode,backref="Models",uselist=True,
viewonly=True),
        'Code':tblModel.c.ModelCode,
        'Weight':tblModel.c.ModelWeight,
        'Start_Date':tblModel.c.EffectDate,
        'Products': relation(Product, backref='Model',lazy=True,
cascade="all, delete-orphan"),
        }
)


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to [email protected]
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