maestroQC wrote:
Hi,

Its one of those days. I cannot solve this. Any help would be greatly
appreciated!
When I execute this:

class Db(object):
    def insertAccount(self, date, accountNumber, description,
openingBalance):
        dec = decimal.Decimal(openingBalance)
        db = MySQLdb.connect(host="localhost", user="dumb",
passwd="dumber", db="rdc")
        cursor = db.cursor()
        cursor.execute("INSERT INTO es_accounts (dateCreated,
accountNumber, description, openingBalance) VALUES (%s, %s, %s, %d)",
(date, accountNumber, description, dec))

I get this error:
Traceback (most recent call last):
  File "main.py", line 59, in <module>
    main()
  File "main.py", line 40, in main
    dbObj.insertAccount(dateTo, item[0], item[1], item[8])
  File "C:\projects\workspace\INYR_ES_0.1\src\db.py", line 19, in
insertAccount
    cursor.execute("INSERT INTO es_accounts (dateCreated,
accountNumber, description, openingBalance) VALUES (%s, %s, %s
, %d)", (date, accountNumber, description, dec))
  File "c:\python25\lib\site-packages\MySQLdb\cursors.py", line 151,
in execute
    query = query % db.literal(args)
TypeError: int argument required

My table is defined as:
CREATE TABLE es_accounts (
        id int(6) not null auto_increment,
        dateCreated date DEFAULT '0000-00-00',
        accountNumber int(6) not null,
        description varchar(255) not null,
        openingBalance decimal(15,8) NOT NULL DEFAULT 0.00000000,
        primary key (id)
);

TIA

How embarassing. My previous post is not correct in it's explanation, unless there is some way to tell Decimal not to allow int coercion...

--> from decimal import Decimal
--> n10_25 = Decimal('10.25')
--> n10_25
Decimal("10.25")
--> "%d" % n10_25
'10'

About the only thing it had even partially right is not using %d, as it will truncate the fractional part of your opening balance. As far as why you are getting that error, I now have no idea, and I apologize for any confusion created by my error.

~Ethan
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to