quinta-feira, 7 de outubro de 2010

Problemas com Sqlite3 no windows!

Isabella Fontes

Olá,

Problemas com Sqlite3 no windows!

Nosso banco é feito todo em sqlite3 e quanto a sua validação era preciso checar se o arquivo local existia, caso contrario seria recriado.Até esse passo, ok.O problema começou qaundo o windows (XP,Vista  e Seven) toda vez que verificava se a função 'os.path.exists' era True ou False, ele recriava o arquivo database.db e sempre retornava que o arquivo existia!

Mas conseguimos a solução!Segue abaixo o que foi feito para solucionar:

Bibliotecas usadas:

import sqlite3
import time
import os
import traceback

Funcoes dentro da Classe Database.py:

""" Nesta função pega-se o cursor e a conexao com o path / endereco do banco"""
def conectar_banco_de_dados():  
    db_connect = sqlite3.connect(config.path_db())
    db_cursor = db_connect.cursor()
    return db_connect, db_cursor   

""" Nesta função é feita a verificação do banco, caso exista verifica o numero de tabelas senao recria-o"""
def verificar_banco_de_dados():
    db_name = config.path_db()  
    logging.warning("Verificar banco de dados")
    if not os.path.isfile(db_name):
        logging.warning("Nao encontrado banco de dados.Criar banco de dados.")       
        try:           
            criar_banco_de_dados()
        except sqlite3.OperationalError:
            trace = traceback.format_exc()
            logging.exception(trace)
    else:         
        """
            TODO: VERIFICAR QTDE DE TABELAS.SE O BANCO NAO FOI CORROMPIDO.
        """
        try:
            logging.warning("Verificando integridade do banco de dados.")
            db_connect, db_cursor = conectar_banco_de_dados()
            query = "select tbl_name from sqlite_master where type='table'"
            db_cursor.execute(query)
            db_connect.commit()
            tables = 0
            for row in db_cursor:
                tables += 1
            print (tables)
            if tables != 8:
                raise sqlite3.IntegrityError
            else:
                logging.warning("Banco esta Ok.")                                          
        except:
            trace = traceback.format_exc()
            logging.error("Erro foi encontrado")
            logging.exception(trace)

Nenhum comentário:

Postar um comentário