associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

Revisão 1e 2004-08-16 01:42:03

Excluir mensagem

BancosDeDadosSql

Acesso a Banco de dados SQL

O Python não possui acesso nativo a bancos de dados SQL em sua biblioteca padrão, somente ao Berkley database engine(BDB), mas define uma API padrão que os drivers de acesso a esses bancos de dados devem seguir, assim qualquer que seja o banco de dados os procedimentos são parecidos.

Os quatro principais bancos de dados livres que podem ser acessados do Python são o SQLite, o MySQL, o PostgreSQL e o Interbase/Firebird.

Para cada um inicie importando os drivers:

   1 import MySQLdb # para o MySQL
   2 import sqlite  # para o SQLite
   3 from pyPgSQL import PgSQL # para o PostgreSQL
   4 import kinterbasdb # para Interbase / Firebird

Nota: Não faça from driver import * porque isso fará com que o Python importe muito lixo para o namespace padrão, além disso, isso impossibilita o uso de mais de um driver ao mesmo tempo.

Conexão

Aqui os estilos variam muito pouco, com excessão do SQLite, que acessa um arquivo local onde está o banco de dados.

Para o MySQL:

   1 con = MySQLdb.connect('servidor', 'usuario', 'senha')
   2 con.select_db('banco de dados')

Para o SQLite:

   1 con = sqlite.connect('nome do arquivo', mode=775) # no futuro
   2                                                   # mode definirá o modo
   3                                                   # de trabalho

Para o PostgreSQL:

   1 con = PgSQL.connect(host='servidor',
   2                     database='banco de dados',
   3                     user='usuario',
   4                     password='senha')

Para o Interbase / Firebird:

   1 con = kinterbasdb.connect(dsn='servidor:/path/arquivo.fdb',
   2                           user='usuario',
   3                           password='senha')

Uso

Daqui pra frente todos os métodos da API são iguais. Obtém-se um cursor:

   1 cursor = con.cursor()

Executa-se algum SQL:

   1 cursor.execute('ALGUM SQL')

Obtem-se o resultado:

   1 rs = cursor.fetchone() # busca uma linha ou;
   2 rs = cursor.fetchall() # busca todas as linhas ou;
   3 rs = cursor.dictfetchall() # busca todas as linhas,
   4                            # cada linha tem um dicionário
   5                            # com os nomes dos campos

O KInterbasDB (Interbase/Firebird) não possui suporte para o método:  dictfetchall() 

E no resultado estarão os campos:

   1 print(rs[0]) # valor da primeira coluna.

Notas a respeito do Banco de dados

  • SQLite: Eu uso pra quase tudo, pelo menos para aquilo que não precise ser partilhado em rede. É rapido, simples, não depende de servidor (já que o seu programa fica responsável pelo gerenciamento do banco de dados). Não serve para nada com intenções mais sérias já que não funciona em rede (a não ser que se partilhe os arquivos e acesse-o a partir daí, mas ele não é multiusuário).

  • MySQL: É o meu preferido. Fácil de instalar (principalmente no windows), fácil de gerenciar e bastante rápido. É bastante eficiente e é o mais utilizado na internet em sites dinâmicos.

  • PostgreSQL: É mais difícil de instalar e configurar, o driver para Python é dificil de compilar e tem padrões esquisitos (Eu compilei a partir dos fontes, mesmo assim o driver não encontrava as bibliotecas necessárias para a compilação). Eu pessoalmente não sei porque alguem usa isso, mas.... Nos testes que eu vi é o unico que tem condições de competir com criaturas como o Oracle.

  • Interbase/Firebird: Fácil de instalar no Microsoft Windows a partir dos binários, porém, compilar a partir dos fontes não é tão fácil assim. O banco é bastante robusto, e está em pé de igualdade com o PostgreSQL em termos de recursos. Muito utilizado em Borland Delphi. Os arquivos de instalação podem ser encontrados [http://kinterbasdb.sourceforge.net aqui].

Nota: Se você vai usar o PostgreSQL ou Interbase/Firebird você vai precisar da biblioteca egemix-mx, só que o site estava fora do ar até hoje(08-03) então eu deixei uma versão para download aqui: attachment:egenix-mx-base-2.0.5.py2.3.tar.gz. Não sei o quanto esta versão é desatualizada, mas (pelo menos aqui) esta funcionando.


Obs: Inclui uma documentação inicial sobre o suporte ao Interbase/Firebird, e gostaria de ver mais informações sobre acesso a outros banco de dados nesta página :) -- JuracyFilho


RodrigoCesarHerefeld