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