MySQL Insert

Ethan Furman ethan at stoneleaf.us
Tue Jul 15 20:27:11 CEST 2008


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



More information about the Python-list mailing list