buenas, discculpa...no entendí.
como que la base debe ser creada desde el mismo hilo que lo llama?.

yo ya tengo una db creada con datos, debo consultarlo desde el socket server y 
entregarle la info por esa forma.

la clase que utilizo es esta:

#-*- encoding: utf-8 -*- 
from threading import Thread      
import sqlite3
#Clase con el hilo para atender a los clientes.  
#En el constructor recibe el socket con el cliente y los datos del  
#cliente para escribir por pantalla  
class pj(Thread):      

  def __init__(self, socket_cliente, datos_cliente):
    # LLamada al constructor padre, para que se inicialice de forma
    # correcta la clase Thread.
    Thread.__init__(self)
    # Guardamos los parametros recibidos.
    self.socket = socket_cliente
    self.datos = datos_cliente
    # conectamos a la base de datos:
    conn = sqlite3.connect('d:\mud\soft\mundo.db')
    self.db = conn.cursor()
    
entonces aquí en self.db ya dejo la conexión activa en ese hilo para llamar a 
la bd y consultarla. pero según leí en otra respuesta, solo puedo trabajar con 
una sola conexión...entonces tendría que activar conexión, consultar, y 
cerrar?...no se sobresaturaría sqlite con conexión activa a cada ratito?. osea 
abro y cierro todo el tiempo?...
lo que intento ahcer es un juego por telnet. y como la info se actualiza todo 
el tiempo ppensé en guardar toda la info en sqlite.

pero veo que hilos no es una buena forma o sqlite no se lleva con ella.
que otra forma me aconsejarían?.

saludos y gracias.

atte, Miguel






Subject: Re: [Python-es] problema con sqlite3 y hilos


    El 29 de agosto de 2012 21:24, Miguel Barraza <cor...@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@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




------------------------------------------------------------------------------


  _______________________________________________
  Python-es mailing list
  Python-es@python.org
  http://mail.python.org/mailman/listinfo/python-es
  FAQ: http://python-es-faq.wikidot.com/
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a