[Tutor] TypeError when io.open is used

petkovas at dir.bg petkovas at dir.bg
Mon Jun 28 00:20:01 CEST 2010


> Can you send the full error text please? I'm not sure which 
> is line 55 and Python normally displays the faulty line as 
> part of the error trace.
>
> As it is I can't see any reason for it to fail but I'd like to 
> be sure I'm looking at the right place!
>
> Also is there any reason why you explicitly call io.open() 
> instead of just using the built-in open() directly? I know 
> they are the same function but its quite unusual to use 
> the io version explicitly...
>
> -- 
> Alan Gauld
> Author of the Learn to Program web site
> http://www.alan-g.me.uk/

The full error message is:

Traceback <most recent call last>:
    File "insert_into_db_v9.py", line 55, in <module>
       WHERE testtable_n = %s""", data1, 
str(os.path.splitext(file)[0]))
TypeError: an integer is required

And i would want to add that str() is not the problem. I have tried 
without it and the problem persisted.

I have tried the following, too:

from pg8000 import DBAPI
import os
import os.path
import sys

# !!! that is test data. It must be changed
conn=DBAPI.connect(host="localhost", database="postgres", 
user="postgres", password="test")

#conn.cursor will return a cursor oject, you can use this cursor to 
perform queries
cursor = conn.cursor()

file = open( 
"C:\\Blender_Library\\BlenderLib\\objectLib\\Faqns\\Osaka2\\faqns_osaka_2.jpg", 
"rb" )
data1 = DBAPI.Binary(file.read())
data2 = 'faqns_osaka_2'
	
# execute our Query
cursor.execute("UPDATE testtable SET jpeg = %s WHERE testtable_n = 
%s", data1, data2)
sys.stdout.flush()						

# Save (commit) the changes
conn.commit()
		
# We can also close the cursor if we are done with it
cursor.close()

The problem this time was:
Traceback <most recent call last>:
    File "insertdb_pg8000.py", line 19, in <module>
       cursor.execute("UPDATE testtable SET jpeg = %s WHERE 
testtable_n = %s", data1, data2)
    File "build\bdist.win32\egg\pg8000\dbapi.py", line 243, in _fn
TypeError: execute() takes at most 3 arguments (4 given)




More information about the Tutor mailing list