Pergunta

Há um paradigma Java para acessar banco de dados implementado no DataSource Java. Este objeto criar uma abstração útil em torno da criação de conexões de banco de dados. O objeto DataSource mantém a configuração de banco de dados, mas só vai criar conexões de banco de dados a pedido. Isto é permite-lhe manter toda a configuração de banco de dados e código de inicialização em um lugar, e facilita a implementação de banco de dados alterar ou usar um banco de dados fictícios para teste.

Eu atualmente trabalhando em um projeto Python que usa cx_Oracle. Em cx_Oracle, obtém-se uma ligação diretamente do módulo:

import cx_Oracle as dbapi
connection = dbapi.connect(connection_string)
# At this point I am assuming that a real connection has been made to the database.
# Is this true?

Eu estou tentando encontrar um paralelo ao DataSource em cx_Oracle. Eu posso facilmente criar esta criando uma nova classe e empacotamento cx_Oracle, mas eu queria saber se este é o caminho certo para fazê-lo em Python.

Foi útil?

Solução

Você vai encontrar informações relevantes de como acessar bancos de dados em Python, olhando para PEP-249: Python Database API Specification v2.0 . Conforme cx_Oracle a esta especificação, como fazem muitos motoristas de banco de dados para Python.

Nesta especificação um objecto Connection representa uma ligação de base de dados, mas não há nenhuma está embutido o pool. Ferramentas como SQLAlchemy fornecem pooling instalações, e embora SQLAlchemy é frequentemente classificado como um ORM, ele não tem para ser usado como tais e oferece belas abstrações para uso no topo dos motores de SQL.

Se você quer fazer objeto-relacional de mapeamento, em seguida, SQLAlchemy faz o negócio, e você pode considerar tanto a sua própria sintaxe declarativa ou outra camada, como Elixir que fica no topo de SQLAlchemy e proporciona maior facilidade de uso para os casos de uso mais comum.

Outras dicas

Eu não acho que há uma maneira "certa" de fazer isso em Python, exceto talvez para ir um passo além e usar outra camada entre você eo banco de dados.

Dependendo do motivo para querer usar o conceito de fonte de dados (que eu só já em em Java), SQLAlchemy (ou algo similar) pode resolver os problemas para você, sem você ter que escrever algo a partir do zero.

Se isso não caber a conta, escrevendo seus próprios sons de mensagens publicitárias como uma solução razoável.

Sim, Python tem uma abstração similar.

Esta é do nosso teste de regressão de construção local, onde nós asseguramos que podemos conversar com todos os nossos bancos de dados sempre que construir um novo python.

if database == SYBASE:
    import Sybase
    conn = Sybase.connect('sybasetestdb','mh','secret')
elif database == POSTRESQL:
    import pgdb
    conn = pgdb.connect('pgtestdb:mh:secret')
elif database == ORACLE:
    import cx_Oracle
    conn = cx_Oracle.connect("mh/secret@oracletestdb")

curs=conn.cursor()
curs.execute('select a,b from testtable')
for row in curs.fetchall():
    print row

(nota, este é a versão simples, no nosso código multidb-aware que temos uma classe DbConnection que tem isso dentro da lógica.)

Eu só chupado e escrevi o meu próprio. Isso me permitiu adicionar coisas como abstrair o banco de dados (Oracle / MySQL / Acesso / etc), acrescentando o registo, tratamento de erros com reversões de transações, etc.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top