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