Thread: [SQLObject] Strange behavior - passing dictionaries to instantiate
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: Christopher S. <csi...@gm...> - 2007-06-28 14:55:20
|
Hello, I've defined these classes (heavily edited to show only the relevant parts): class MergeableSQLObject(sqlobject.SQLObject): @classmethod def merge(cls, **attributes): print "attributes:", attributes instance = cls(**attributes) print print "instance:", instance return instance class CashTransaction(MergeableSQLObject): portfolio = sqlobject.ForeignKey('Portfolio', notNone=True) date = sqlobject.DateCol(notNone=True) number = sqlobject.IntCol(notNone=True) type = sqlobject.ForeignKey('TransactionType', notNone=True) security = sqlobject.ForeignKey('Security', default=None) quantity = sqlobject.DecimalCol(size=21, precision=6, default=None) price = sqlobject.DecimalCol(size=21, precision=6, default=None) grossAmount = sqlobject.DecimalCol(size=21, precision=6, default=None) brokerFees = sqlobject.DecimalCol(size=21, precision=6, default=None) otherFees = sqlobject.DecimalCol(size=21, precision=6, default=None) netAmount = sqlobject.DecimalCol(size=21, precision=6, default=None) isFlow = sqlobject.BoolCol(notNone=True, default=False) squelchFlow = sqlobject.BoolCol(notNone=True, default=False) memo = sqlobject.StringCol(length=256, default=None) When I pass some attribute information into Cash.Transaction.merge, it works fine up to a certain date. Starting on that date, when instantiating a new CashTransaction object, it replaces the "number" attribute with some other number... the same one every time, in fact. Here's sample output: ==== attributes: {'otherFees': 0, 'brokerFees': None, 'netAmount': Decimal("164.1"), 'price': Decimal("16.41"), 'grossAmount': None, 'number': 2157578935L, 'date': datetime.date(2006, 1, 25), 'portfolio': <Portfolio 8L ledgerID=5L dateOpened=None dateFunded=None dateClosed=None notes=None>, 'security': <Security 7L >, 'type': <TransactionType 18L code='DIV' description='Cash Dividend'>, 'memo': '10 shares STOCK PRICE @$16.41', 'quantity': Decimal("10")} instance: <CashTransaction 26L portfolioID=8L date='datetime.date(200...)' number=2147483647L typeID=18L securityID=7L quantity=Decimal("10.000000") price=Decimal("16.410000") grossAmount=None brokerFees=None otherFees=Decimal("0.000000") netAmount='Decimal("164.1000...)' isFlow=False squelchFlow=False memo="'10 shares STOCK ...'"> ===== Notice how the "number" has changed, but all other attributes remain the same. Anybody have any idea what is going wrong here? I'm using SQLObject-0.8dev_r1840-py2.4 Thanks, cs |
From: Oleg B. <ph...@ph...> - 2007-06-28 14:58:29
|
On Thu, Jun 28, 2007 at 09:55:00AM -0500, Christopher Singley wrote: > number=2147483647L import sys print sys.maxint ;) Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Christopher S. <csi...@gm...> - 2007-06-28 15:06:11
|
Doh! Thanks a lot; I haven't run into that yet. I guess I'll just use strings instead... cs On Thursday 28 June 2007 09:58, Oleg Broytmann wrote: > On Thu, Jun 28, 2007 at 09:55:00AM -0500, Christopher Singley wrote: > > number=2147483647L > > import sys > print sys.maxint > > ;) > > Oleg. |
From: Oleg B. <ph...@ph...> - 2007-06-28 15:09:55
|
On Thu, Jun 28, 2007 at 10:05:53AM -0500, Christopher Singley wrote: > Thanks a lot; I haven't run into that yet. I guess I'll just use strings > instead... Doesn't you DB backend support bigger INT types? In PostgreSQL there is bigint, in MySQL there should be a whole host of types... Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Christopher S. <csi...@gm...> - 2007-06-28 15:48:24
|
On Thursday 28 June 2007 10:09, Oleg Broytmann wrote: > Doesn't you DB backend support bigger INT types? In PostgreSQL there is > bigint, in MySQL there should be a whole host of types... I'm using MySQL here, but I'd like to keep using SQLObject itself to create my tables for this application, if possible. Have BigIntCol types been implemented in 0.9? Do they work for all the backends? TIA, cs |
From: Oleg B. <ph...@ph...> - 2007-06-29 10:31:00
|
On Thu, Jun 28, 2007 at 10:48:12AM -0500, Christopher Singley wrote: > Have BigIntCol types been > implemented in 0.9? Do they work for all the backends? Yes. No, only for MySQL. Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |