MySQL Insert
Ethan Furman
ethan at stoneleaf.us
Tue Jul 15 14:11:15 EDT 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
The problem is your %d in Values, and then using a Decimal type to feed
it. Depending on the type of your openingBalance field, you may want to
change the %d to %s, or change dec to int(dec), or change the %d to %f
and change dec to float(dec). My experience with the Decimal type is
limited, so there may be other options as well.
~Ethan
More information about the Python-list
mailing list