sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type
Question: I am writing a proxy crawler which stores data in sqlite database,and I prefer
to saving a complex object by statement like `cur.execute("insert into test(p)
values (?)", (p,))`  
Then I find a useful official document
[here](http://docs.python.org/2/library/sqlite3.html#converting-sqlite-values-
to-custom-python-types)  
The example in official document works very well.  
But there is a problem come to me.  
I change the official code to :  

    
    
    import sqlite3
    import time
    
    class Proxy:
        def __init__(self,ip,port,speed,area,level,active,last_check_time):
            self.ip = ip
            self.port = port
            self.speed = speed
            self.area = area
            self.level = level
            self.active = active
            self.last_check_time = last_check_time
        def __repr__(self):
            return '%s;%s;%s;%s;%s;%d;%d' % (self.ip,self.port,self.speed,self.area,self.level,self.active,self.last_check_time)
    
    
    
    def adapt_proxy(proxy):
        return '%s;%s;%s;%s;%s;%d;%d' % (proxy.ip,proxy.port,proxy.speed,proxy.area,proxy.level,proxy.active,proxy.last_check_time)
    
    def convert_proxy(s):
        ip,port,speed,area,level,active,last_check_time = map(str, s.split(";"))
        return Proxy(ip,port,speed,area,level,int(active),int(last_check_time))
    
    
    # Register the adapter
    sqlite3.register_adapter(Proxy, adapt_proxy)
    
    # Register the converter
    sqlite3.register_converter("proxy", convert_proxy)
    
    p = Proxy('231', '123', '2424','444','555',1,int(time.time()))
    
    #########################
    # 1) Using declared types
    con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES)
    cur = con.cursor()
    cur.execute("create table test(p proxy)")
    
    cur.execute("insert into test(p) values (?)", (p,))
    cur.execute("select p from test")
    print "with declared types:", cur.fetchone()[0]
    cur.close()
    con.close()
    
    #######################
    # 1) Using column names
    con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_COLNAMES)
    cur = con.cursor()
    cur.execute("create table test(p)")
    
    cur.execute("insert into test(p) values (?)", (p,))
    cur.execute('select p as "p [proxy]" from test')
    print "with column names:", cur.fetchone()[0]
    cur.close()
    con.close()
    

error occur:

    
    
    Traceback (most recent call last):
    
      File "C:\Users\kss\Desktop\py\ts1.py", line 52, in <module>
        cur.execute("insert into test(p) values (?)", (p,))
    sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.
    [Finished in 0.1s with exit code 1]
    

It is really odd.I can not figure out it  


Answer: Change your declaration of Proxy to:

    
    
    class Proxy(object):
        # all the stuff before
    

The problem is that your class is not a "new style" class; inheriting from
`object` makes it one.

Notice how the
[documentation](http://docs.python.org/2/library/sqlite3.html#registering-an-
adapter-callable) says:

> The type/class to adapt must be a new-style class, i. e. it must have object
> as one of its bases.

