Excepción PySQLite2

Andrés Ignacio Martínez Soto martine en aditel.org
Lun Abr 10 22:43:21 CEST 2006


Hola a la lista, estoy haciendo mi blog "artesanal" con Python, lo tengo
casi terminado, pero me están surgiendo algunos problemas que me impiden
terminar ciertos módulos de mi blog.
El equipamiento es un Apache2 con Python 2.4 , PySQLite2 y SQLite 3 , en
Debian Sarge.
El problema es el siguiente:
-1. Los SELECTS de la base de datos funcionan sin problemas
-2. Cuando se hace un INSERT (escribir) Python lanza:
        "Exception pysqlite2.dbapi2.ProgrammingError: 'Cannot operate on
a closed database.' in <bound method dbHandler.__del__ of
<dbhandler.dbHandler instance at 0xb7bd770c>> ignored"
-3. Los permisos son los correctos, aún así sigue fallando...

Código de mi "dbHandler" (capa sobre PySQLite2 para trabajar más fácil
con ella):

#Andrés Ignacio Martínez Soto /* Copyleft - GPL Licencia */

#!/usr/bin/python
#-*-coding:utf-8 -*-

import pysqlite2.dbapi2 as sqlite
import cgi
import time

class dbHandler:
        def __init__ (self,nbase="blog.db"):

                        #atributs
                        #self.__dbname_=""
                        if (nbase):
                                self.__dbname_=nbase

                        else:
                                self.__dbname_="blog.db"



                        self.dbh,self.cursor=self.__conecta_()



        def __conecta_(self):
                        conexio = sqlite.connect(self.__dbname_)
                        cur = conexio.cursor()
                        return conexio,cur

        def consulta (self,consulta,howmany="all"):
                        try:
                                if howmany=="all":
                                        consulta = self.cursor.execute
(consulta)
                                        result=self.cursor.fetchall()

                                elif howmany=="one":
                                        consulta = self.cursor.execute
(consulta)
                                        result=self.cursor.fetchone()

                                else:
                                        consulta = self.cursor.execute
(consulta+" LIMIT "+str(howmany))
                                        result=self.cursor.fetchall()

                                self.dbh.commit()
                                return result

                        except:
                                self.__del__()


        def __del__ (self):
                        self.cursor.close()
                        self.dbh.close()


def main (db="blog.db"):
        dbh=dbHandler()

#end código


¿Qué puedo hacer?

Saludos y gracias :)




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