CONNECT, CURSOR E CREATE TABLE

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.py
e 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