Mostrando postagens com marcador sqlite3. Mostrar todas as postagens
Mostrando postagens com marcador sqlite3. Mostrar todas as postagens

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)

sexta-feira, 23 de julho de 2010

Create table - Sqlite3

Isabella Fontes

Olá,

Hoje vou postar os scripts essenciais ao nosso projeto.
Detalhe: Também colocarei os imports necessários.

Imports:
#!/usr/bin/env python
import sqlite3
import logging
import configuracoes


Sabendo disso, segue abaixo, o script de criação.
Nome do arquivo: database.py

def criar_banco_de_dados():
    """ Cria o banco de dados no local onde ja definimos, no arquivo
        configuracoes.py
    """

    logging.debug("Executando criar banco de dados")
    #{ CP - Cadastrar Pessoa , EP- Excluir Pessoa, CCF - Cadastrar
Configuracao, });
    sql = """
            CREATE TABLE [usuario] ([id]INTEGER PRIMARY KEY ASC ON
CONFLICT ROLLBACK AUTOINCREMENT,
            [login] VARCHAR (250), [senha] VARCHAR(10), [id_pessoa]
INTEGER, [id_grupo] INTEGER, [data_ultimo_login] INTEGER);
            CREATE TABLE [grupo] ([id]INTEGER PRIMARY KEY ASC ON
CONFLICT ROLLBACK AUTOINCREMENT,
            [nome] VARCHAR(20), [id_permissao] INTEGER);
            CREATE TABLE [permissao] ([id]INTEGER PRIMARY KEY ASC
ON CONFLICT ROLLBACK AUTOINCREMENT,
            [nome] VARCHAR(20),[acoes] VARCHAR(3));
            CREATE TABLE [pessoa] ([id]INTEGER PRIMARY KEY ASC ON
CONFLICT ROLLBACK AUTOINCREMENT,
            [nome] VARCHAR(50), [data_nascimento] INTEGER);
            CREATE TABLE [configuracao] ([id]INTEGER PRIMARY KEY ASC
ON CONFLICT ROLLBACK AUTOINCREMENT,
            [velocidade] BOOLEAN, [cinto] BOOLEAN, [semaforo] BOOLEAN);
            CREATE TABLE [pontuacao] ([id]INTEGER PRIMARY KEY ASC
ON CONFLICT ROLLBACK AUTOINCREMENT,
            [id_usuario] INTEGER, [valor] INTEGER, [data_ultima_missao]
DATE , [versao_ultima_missao] INTEGER)
          """
       
    logging.warn("o banco de dados sera RECRIADO!")
    conn = conectar_banco_de_dados()
    queries = sql.split(';')
    for query in queries:
        conn.execute(query)
    conn.commit()

Observação: O código poderá ser alterado de acordo com a necessidade do banco.

sexta-feira, 14 de maio de 2010

Banco de Dados - O Projeto se tornando mais real

Isabella Fontes

Olá pessoal,

Nesta semana me afastei mais da modelagem de objetos no Blender pois há alguns integrantes do grupo se empenhando neste quesito.
E também porque precisamos que o jogo tenha "funcionalidades" e com isso é necessário analisar alguns critérios:

- A interface do jogo (não confundir interface visual que é o layout/design com interface em programação, para mais detalhes clique aqui), o que inclui decidir como os objetos e seus módulos irão interagir com o usuário;
- Como será a parte de banco de dados;
- Como "rodará" o jogo em diferentes sistemas operacionais.

Tendo em vista esses critérios já mencionados, então nesta semana me especializei na interface (XULRunner já citado em um post anterior) e na parte de banco de dados.
Quanto ao banco de dados encontrei o Sqlite3 (inclusive o utilizo no estágio) que tem uma ótima integração com Python, a linguagem do Blender e isto favorece muito.
Estamos montando um "uml" com base nos DFDs nas aulas de TSPD e após isto já criaremos definitivamento nosso banco.


*Sqlite3:
  • É Software Livre/domínio público e Multiplataforma;
  • É um mecanismo de armazenamento seguro com transações ACID;
  • Não necessita de instalação, configuração ou administração;
  • Implementa a maioria do SQL92;
  • Permite guardar o banco de dados em um único arquivo;
  • Suporta bases de dados acima de 2 terabytes;
  • Sem dependências externas.

Para ler mais sobre sua documentação, clique aqui.