[Python-es] problema con sqlite3 y hilos

Juan José Gómez Romera jjgomera en gmail.com
Jue Ago 30 19:07:44 CEST 2012


>
> El 29 de agosto de 2012 21:24, Miguel Barraza <correo en miguelbarraza.com.ar
> > escribió:
>
>> **
>> buenas, estoy haciendo una aplicación con sockets, cada cliente lo
>> atiende en un hilo diferente.oserrarlilos
>> cada cliente hace consultas a una base sqlite3.
>> pero al consultar me tira este error:
>>
>>     self.db.execute(sql)
>> ProgrammingError: SQLite objects created in a thread can only be used in
>> that sa
>> me thread.The object was created in thread id 2480 and this is thread id
>> 3740
>>
>> al inicio hacía una sola conexión y le pasaba el puntero de conexión a el
>> objeto que manejaba el cliente.
>> pensé que ese era el error, así que hice una conexión por cada cliente
>> dentro de la clase que gestiona cada conexión. y me tira el mismo
>> error...así que llegué a la conclusión que sqlite no funciona con
>> hilos...¿es eso cierto?...o de que forma puedo solucionar este problema?.
>>
>> lo que hice también fue hacer una conexión dentro de un objeto y pasar el
>> puntero de ese objeto a todos los clientes, y hacer consultas a esa clase
>> master para que devuelva los datos de base de datos. y igualmente tiró el
>> mismo error.
>>
>> imagino que debe haber forma de trabajar con sqlite3 y hilos.
>> así que por eso consulto: alguien se vio en este problema?, como lo pudo
>> solucionar?.
>>
>> saludos a todos!.
>>
>> pd.: no copio parte del código ya que es bastante y no se donde
>> exactamente podría estar el error...aunque como lo probé de varias formas y
>> siempre tiró el mismo error creo que es la metodología, no es el
>> código...tiene que haber alguna forma que no conozco para utilizar sqlite
>> con hilos o procesos.
>>
>> atte, Miguel
>>
>> _______________________________________________
>> Python-es mailing list
>> Python-es en python.org
>> http://mail.python.org/mailman/listinfo/python-es
>> FAQ: http://python-es-faq.wikidot.com/
>>
>>
El error te lo dice, el propio hilo tiene que crear la base de datos que
usa, asi que procura que la base de datos la creas en el hilo, este mismo
problema lo he tenido hace un rato:

def getElement(indice):
        databank.execute("select * from compuestos where id==%i"%indice)
        componente=databank.fetchone()
    return componente

como databank era creado al importar el modulo, en el hilo principal, esa
base de datos solo la podra usar sin quejarse el hilo principal, he tenido
que añadir la linea de creacción de base de datos en la propia función para
que la hubiera creado el propio hilo y no me diera error:

def getElement(indice):
        databank=sqlite3.connect(databank_name).cursor()
        databank.execute("select * from compuestos where id==%i"%indice)
        componente=databank.fetchone()
    return componente
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20120830/6b3d7bd8/attachment.html>


Más información sobre la lista de distribución Python-es