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

Diferenças para "BancosDeDadosSql"

Diferenças entre as versões de 1 e 6 (5 versões de distância)
Revisão 1e 2004-08-16 01:42:03
Tamanho: 4550
Comentário:
Revisão 6e 2006-01-23 22:31:06
Tamanho: 6836
Editor: FelipeLessa
Comentário: Adiciona menção sobre o uso do cursor como iterator
Deleções são marcadas assim. Adições são marcadas assim.
Linha 16: Linha 16:
import pymssql #para o MS-SQL. (existem outros módulos - ADOdb for Python/PHP)
Linha 19: Linha 20:
         
Linha 61: Linha 62:
Para o MS-SQL

{{{
#!python
con = pymssql.connect(host = 'servidor',
                      user = 'usuario',
                      password = 'senha',
                      database = 'base de dados')
}}}

Linha 65: Linha 77:
            
Linha 79: Linha 91:
            
Linha 91: Linha 103:
''O MS-SQL também não possuí suporte para o método: '' {{{ dictfetchall() }}}
Linha 98: Linha 112:
Alternativamente você pode usar o cursor como um iterator:
{{{
#!python
for linha in cursor:
    print linha[0] # valor da primeira coluna
}}}
Linha 99: Linha 120:
        
Linha 104: Linha 125:
 * '''MS-SQL:''' BD comercial da Microsoft, fácil configuração e tudo na mão através da Interface gráfica. Quanto a performace não tenho uma base de comparação em produção (ainda). Mas ele atende as nossas necessidades ;).
Linha 105: Linha 127:
'''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. == Bancos de Dados Proprietários ==
 * '''Oracle'''
Embora todo paradigma possa e deva ser contestado, até mesmo para validá-lo, é consenso que a parte mais estável da aplicação são os dados, em conseqüência as diversas empresas que utilizam o BD Oracle podem optar por plataformas livres, mas provavelmente pensarão duas vezes antes de trocar o banco.

Na minha humilde opinião a Oracle tem uma das mais abusivas políticas de preços entre as empresas de software, mas é a líder no setor, portanto o desenvolvedor Python tem que estar preparado para acessar este BD.

Utilizo e recomendo para isto a biblioteca cx_Oracle, um módulo que permite o acesso a este BD de acordo com a especificação da API padrão do Python. (RômuloCampelo)

== Notas a respeito dos Módulos ==

 *'''pymssql''' Achei o módulo pymssql num estágio bastante inicial, não usei em larga escala, porém na aplicação que utilizei não tive instabilidades, o problema é a pouca documentação.

 Dependências:

  * Linux => FreeTDS 0.6 ou maior e unixodbc (ODBC !OpenSource).

  * Windows => DBLIB Libraries (MSSQL !DevTools), não sei o que são, pois só usei em máquinas de desenv. Talvez o mdac(MS Data Access Component) resolva, é gratuito o download no site da MS.
 site: [http://pymssql.sourceforge.net]

 *'''ADOdb''' Achei esse módulo após ter concluído o sistema baseado no pymssql, testem e comentem aqui.

 site: [http://adodb.sourceforge.net]


 *'''pyPgSQL / kinterbasdb ''' Você vai precisar da biblioteca egenix-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.
Linha 110: Linha 156:
        

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
   5 import pymssql  #para o MS-SQL. (existem outros módulos - ADOdb for Python/PHP)

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')

Para o MS-SQL

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

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() 

O MS-SQL também não possuí suporte para o método:  dictfetchall() 

E no resultado estarão os campos:

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

Alternativamente você pode usar o cursor como um iterator:

   1 for linha in cursor:
   2     print linha[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].

  • MS-SQL: BD comercial da Microsoft, fácil configuração e tudo na mão através da Interface gráfica. Quanto a performace não tenho uma base de comparação em produção (ainda). Mas ele atende as nossas necessidades ;).

Bancos de Dados Proprietários

  • Oracle

Embora todo paradigma possa e deva ser contestado, até mesmo para validá-lo, é consenso que a parte mais estável da aplicação são os dados, em conseqüência as diversas empresas que utilizam o BD Oracle podem optar por plataformas livres, mas provavelmente pensarão duas vezes antes de trocar o banco.

Na minha humilde opinião a Oracle tem uma das mais abusivas políticas de preços entre as empresas de software, mas é a líder no setor, portanto o desenvolvedor Python tem que estar preparado para acessar este BD.

Utilizo e recomendo para isto a biblioteca cx_Oracle, um módulo que permite o acesso a este BD de acordo com a especificação da API padrão do Python. (RômuloCampelo)

Notas a respeito dos Módulos

  • pymssql Achei o módulo pymssql num estágio bastante inicial, não usei em larga escala, porém na aplicação que utilizei não tive instabilidades, o problema é a pouca documentação. Dependências:

    • Linux => FreeTDS 0.6 ou maior e unixodbc (ODBC OpenSource).

    • Windows => DBLIB Libraries (MSSQL DevTools), não sei o que são, pois só usei em máquinas de desenv. Talvez o mdac(MS Data Access Component) resolva, é gratuito o download no site da MS.

    site: [http://pymssql.sourceforge.net]

  • ADOdb Achei esse módulo após ter concluído o sistema baseado no pymssql, testem e comentem aqui.

    site: [http://adodb.sourceforge.net]

  • pyPgSQL / kinterbasdb Você vai precisar da biblioteca egenix-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