Uma das idéias básicas sobre bancos de dados é que eles não estão ligados a aplicações. Assim, vamos criar, no XO, um diretório onde colocar os databases, por exemplo:
mkdir /databases
Quando esse diretório é criado ele não permite "write" para todos. Assim, normalmente se faz:
chmod a+w /databases
Se você não se lembra o que é isso, releia as lições sobre administração de sitema.
Num programa usando o SQLite, o sistema de bancos de dados que vem com o XO, temos que importar o módulo pysqlite2. Para facilitar e podermos usar o prefixo "sqlite" colocamos duas linhas no início do programa:
import pysqlite2 from pysqlite2 import dbapi2 as sqlite
Normalmente só criamos uma tabela uma vez. Assim, não tem sentido criar um pacote XO para fazê-lo. Podemos criar e rodar, dentro do Terminal um programa que o faça.
A primeira função do módulo que vamos usar, cria um objeto Connect que será prefixo para chamarmos alguns métodos. Nessa criação do objeto, designamos o path e nome do database. Se ele não existe, será criado. Se existe, será aberto (não precisamos usar um "open").
conn = sqlite.connect("/databases/alunos.db")
Quando for criado o db (que é um arquivo) ele tem que ser liberado para "write" com:
chmod a+w /databases/alunos.db
O objeto Connect tem vários métodos:
close()
Para fechar o db, após uso.
cursor()
Para criar um objeto Cursor - que é muito importante. Vamos ver seu uso.
commit()
Após executarmos um ou vários comando (que não SELECT) de operações sobre uma tabela (um INSERT e um UPDATE, por exemplo) temos que dar um commit para que elas se efetivem. Caso, por alguma razão, no meio dos vários comandos queiramos anulá-los todos, damos um:
rollback()
Falamos do objeto Cursor. Ele é criado com, por exemplo:
c = conn.cursor()
Será com esse prefixo que executaremos os comandos da linguagem SQL suportados pelo SQLite. Justamente com o primeiro dos método, que vamos ver:
execute()
No exercício dessa lição usaremos esse método.
fetchone()
Um SELECT cria no objeto "c" (o objeto Cursor) uma matriz que pode ser "varrida" usando:
for row in c: #fazer alguma coisa com a linha
Para capturar o dado de uma coluna da linha usamos a indexação row[n], em que "n" é o número de ordem de uma das colunas selecionadas. A primeira é ZERO. Vamos ver isso em exercício mais à frente. Mas existe o método:
fetchone()()
que lê apenas mais uma linha.
Vamos ver então o comando SQL CREATE TABLE que tem que ser usado dentro de um execute.
Ele aceita quatro tipos de colunas:
TEXT INTEGER REAL NULL
Não precisamos definir o tamanho das colunas pois o SQLite trabalha com registro de tamanho variável.
Não existe limite de tamanho para uma linha.
As opções para uma coluna são:
PRIMARY KEY NOT NULL UNIQUE DEFAULT um-valor
Um reference de nosso comando seria:
CREATE TABLE nome-da-tabela( nome-coluna TIPO [opção], nome-coluna TIPO [opção]...)
O dado entre chaves é opcional.
Vejamos nosso exercício. Criado o diretório /databases e liberado para write, vamos para ele e criamos e abrimos o arquivo para o programa:
vi CriaTabcad.py
Nesse arquivo escrevemos nosso programa:
import pysqlite2
from pysqlite2 import dbapi2 as sqlite
conn = sqlite.connect("/databases/alunos.db")
c = conn.cursor()
c.execute("CREATE TABLE cad(matric TEXT , nome TEXT , idade INTEGER , codnivel TEXT)")
print "CRIADO DB alunos.db E TABELA cad"
Salvando e saindo desse arquivo é só executar, na linha de comando:
python CriaTabcad.pye deverá aparecer a mensagem final.
Verifique se o arquivo alunos.db foi criado e se tem 2048 de tamanho ( a tabela dentro dele). Libere esse arquivo para "write".
E estamos prontos para trabalhar com nossa tabela "cad".
LIÇÂO ANTERIOR PRÓXIMA LIÇÂO ÍNDICE HOMEPAGE