[Tutor] sqlite3 Python25 parameter binding problem with UPDATEplease help

aivars aivars868 at gmail.com
Tue Dec 2 20:23:02 CET 2008


Hello again,

Finally I managed to get it working!

I had to remove [year] braces from the second argument - year. The
reason I used [] was the posts we exchanged recently (7th of November)
about CGI script where it was recommended by Kent that I put [] around
string argument:

Quote
The second argument to execute() is a *sequence* of parameter values.
A string is a sequence of characters, so by passing a plain string you
are saying that each character of the string is a parameter to the
SQL.

Try adding braces around the parameter to make  list:
cur.execute("insert into test (name) values (?)", [sPath])

Kent
Unquote

Now the year argument is string so I thought I should do the same
again but it is not working.
The reason is of course is that I am new to python and there are so
many things to learn so the question really is why in this case there
were no [] or () necessary?

Thanks in advance

Aivars



2008/12/2 aivars <aivars868 at gmail.com>:
> Interestingly, when simply testing like this:
>
> import sqlite3, sys
> sPATH=r'e:\pythonexamples\aivars2.db'
> oCon=sqlite3.connect(sPATH)
>
> cur=oCon.cursor()
>
> oCon.execute("""UPDATE rezerve SET latusaldo = ? WHERE gads = ?
> """,(6000.0,'2006'))
>
> oCon.commit()
>
>
> it works. Therefore I am stuck since it looks like there is something
> wrong in below function.
>
> Thanks,
>
> Aivars
>
>
> 2008/12/2 aivars <aivars868 at gmail.com>:
>> Alan,
>> Thanks.
>>
>> Ok I should have been more precise and give more code
>> There is what I do:
>>
>> def starpiba(year, month, day):
>>    datumsno=str(year+'-01-01') #beginning of year date
>>    datumsuz=str(year+'-'+month+'-'+day) #period end date
>>
>>    result = (atlikumiBeiguKurss(year, month, day)-
>> atlikumiDienasKurss(year, month, day))
>>    ##print result
>>    oCon=sqlite3.connect(sPATH)
>>    if result<=0:
>>        print abs(result)
>>        oCon.execute("UPDATE rezerve SET latusaldo =? where gads
>> =?;",(result, [year]))
>>        oCon.commit()
>>    else:
>>        ##print 'aivars'
>>        oCon.execute("UPDATE rezerve SET latusaldo =? where gads
>> =?;",(result, [year]))
>>
>> Please bear in mind I am a noob in Python and I write spaggeti code.
>>
>> There is a table in my sqlite database called rezerve which shows the
>> breakdown of a consolidated reserves item in a consolidated balance
>> sheet report (if that says anything to you) by years. For the previous
>> years the numbers does not change since they are already reported but
>> for the current year it may change month by month until reported.
>> Therefore, I wanted to update the numbers for the current year.
>>
>> The above python function works OK.
>>
>> Thanks
>>
>> Aivars
>>
>>
>> 2008/12/2 Alan Gauld <alan.gauld at btinternet.com>:
>>>
>>> "aivars" <aivars868 at gmail.com> wrote
>>>
>>>> oCon.execute("UPDATE rezerve SET latusaldo =? where gads =?;",(result,
>>>> [year]))
>>>> oCon.commit()
>>>>
>>>> it throws me the error:
>>>> sqlite3.InterfaceError: error binding parameter 1 probably unsupported
>>>> type
>>>
>>> I assume its the [year] value it objects to.
>>> I'm not sure what you expect SQLite to do with a list as a value, it does
>>> not support a list type field.
>>>
>>>> All works OK when using INSERT with the same parameters.
>>>
>>> Are you sure? You can insert a list into a field?
>>>
>>>> Maybe I should as this question on sqlite list?
>>>
>>> Perhaps but I think it is the list parameter that it doesn't like.
>>> Unless I misunderstand the syntax.
>>>
>>> --
>>> Alan Gauld
>>> Author of the Learn to Program web site
>>> http://www.freenetpages.co.uk/hp/alan.gauld
>>>
>>> _______________________________________________
>>> Tutor maillist  -  Tutor at python.org
>>> http://mail.python.org/mailman/listinfo/tutor
>>>
>>
>


More information about the Tutor mailing list