Pysqlite: Criando bancos de dados facilmente no Python

SQLite é uma biblioteca escrita em C, que provê um banco de dados leve e baseado em disco, e por isso não requer nenhum servidor especial e ainda habilita o acesso ao banco de dados usando uma versão modificada da linguagem de consulta SQL. Algumas aplicações podem usar SQLite para armazenar dados internamente. É também possível usar o SQLite para criar um protótipo de um banco de dados para a sua aplicação, e daí exportar o código para um banco de dados maior, como o PostgreSQL or Oracle.

Pysqlite foi desenvolvido por Gerhard Haring, e provê uma interface SQL compativel com a especificação DB-API 2.0 descrita pelo PEP 249.

Usando o pysqlite no Python 2.5

Para usar o pysqlite, você primeiro deve importar o módulo sqlite3, e depois criar uma conexão com o banco de dados. Não precisa instalar nada, pois ele já vem com a distribuição do Python 2.5 No nosso exemplo, criaremos uma conexão com o banco de dados exemplo, que estará no mesmo directório que a nossa aplicação:

import sqlite3

conn=sqlite3.connect('exemplo')

 

Há algumas coisas á notar no exemplo acima:

-Quando criamos uma conexão com um banco de dados que não existe, o pysqlite criará um novo banco de dados automaticamente;

-O argumento da função connect() é o nome do banco de dados. Se o banco de dados estiver num directório diferente, devemos indicar o caminho completo para este endereço, tal como fazemos quando trabalhamos com arquivos de texto.

Podemos também indicar um nome especial, :memory:, para criar um banco de dados na memória RAM. Mas se você sabe como funciona a memória RAM, não vai querer criar um banco de dados nesta memória para a sua aplicação!

Depois de criar a conexão, já podemos criar um objecto do tipo cursor. E invocar o método execute() para executar os comandos SQL. Veja o exemplo:

c = conn.cursor()

 

# Criando a tabela

c.execute('''create table stock

(dado text, trans text, simbolo text, qtd real, preco real)''')

 

 

# Inserindo uma linha de dados

c.execute("""insert into stock

values ('2006-01-05','BUY','RHAT',100,35.14)""")

# Gravando as alterações

conn.commit()

# Também podemos fechar o cursor, quando terminarmos o seu uso

c.close()

 

 


Um pouco de SQL

No exemplo acima, temos alguns comandos um pouco estranhos, são comandos SQL. Se não sabe como funciona o SQL, não se preocupe, que brevemente criarei um artigo explicando o básico(bem básico mesmo) do SQL. Se não estiver com vontade de esperar, aconselho usar o Google , que será uma boa ajuda para encontrar algo sobre esta linguagem. Mas para já dizer que quase todos os bancos de dados usam SQL para manipular os dados armazenados. Logo, se você já trabalhou com algum banco de dados(Eu uso muito o mysql ), estará a vontade com o SQL do pysqlite(Dissemos acima que o SQLite usa uma versão modificada do SQL).

Integrando comandos do Python e SQLite

Normalmente suas operações SQL irão necessitar de usar alguns valores das variáveis Python. Isto é claro, pois queremos armazenar dados da nossa aplicação num banco de dados, e os dados estão nas variáveis Python. Então a questão é: Como passar os valores das variáveis Python para que o SQL possa executar as consultas?

Você não deve executar as suas consultas usando as operações de strings do Python, porque fazer isso não é seguro. Isto faz com que os seus programas sejam vulneráveis a ataques de SQL injections(injecções SQL). Não sabe o que é injecção SQL? Acho que devia ler um pouco os manuais de Kevin Mitnick, faz bem para informáticos!

Em vez disso, use os parámetros da API DB-API. Coloque o sinal ? Toda a vez que você quiser usar uma variável, e depois indique uma tupla de valores em Python , como segundo argumento da função execute() do objecto cursor.

# Numca faça isso, pois não é seguro!

simbolo = 'IBM'

c.execute("… where simbolo = '%s'" % simbolo)

#Mas pode fazer isso

t = (simbolo,)

c.execute('select * from stock where symbol=?', t)

# Um exemplo maior

for t in (('2006-03-28', 'COMPRA', 'IBM', 1000, 45.00),

('2006-04-05', 'COMPRA', 'MSOFT', 1000, 72.00),

('2006-04-06', 'VENDA', 'IBM', 500, 53.00),

):

c.execute('insert into stock values (?,?,?,?,?)', t)

 

Para requisitar os dados, depois de executar um comando SELECT do SQL, você pode usar o cursor como um iterador, invocar o método fetchone do objecto cursor, para requisitar uma única linha ou então invocar o fetchall() para retornar uma lista de linhas do banco de dados.

Exemplo usando um iterador:

 

>>> c = conn.cursor()

>>> c.execute('select * from stock order by price')

>>> for row in c:

… print row

(u'2006-01-05', u'COMPRA', u'RHAT', 100, 35.140000000000001)

(u'2006-03-28', u'COMPRA', u'IBM', 1000, 45.0)

(u'2006-04-06', u'VENDA', u'IBM', 500, 53.0)

(u'2006-04-05', u'COMPRA', u'MSOFT', 1000, 72.0)

Estes exemplos foram tirados do manual do pysqlite. Nos próximos artigos exploraremos classes e funções mais avançadas deste módulo. Mas antes, criarei um artigo mais virado ao nosso objectivo central, que é criar um banco de dados para os nossos jogos, na game engine do Blender, ou em qualquer outra biblioteca, como o Panda3D engine ou o Pygame.

Receba nossas actualizações por email

Ver Campanhas anteriores.

(Visited 452 times, 6 visits today)
Share