有是一个Java范式在Java DataSource实现的数据库的访问。这个对象创建一个围绕创建数据库连接的有效的抽象。该DataSource对象保持数据库的配置,但只能创建要求的数据库连接。这可以让你保持在一个地方所有的数据库配置和初始化代码,并可以很容易地修改数据库实现,或用于测试模拟数据库。

我目前的工作,它使用cx_Oracle Python项目。在cx_Oracle,一个直接从模块获取的连接:

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?

我试图找到一个平行于cx_Oracle的DataSource。我可以很容易地通过创建一个新的类和包装cx_Oracle创造这一点,但我想知道,这是做它在Python的正确途径。

有帮助吗?

解决方案

您会发现如何通过看访问Python的数据库的相关信息PEP-249:Python数据库API规范v2.0 cx_Oracle符合本说明书中,作为用于Python做许多数据库驱动程序。

在本说明书中Connection对象表示数据库连接,但没有内置的池。工具如 SQLAlchemy的确实提供合用设施,虽然SQLAlchemy的是定睛一ORM,它不具有被用作这样的,并提供好的抽象对SQL发动机的顶部使用。

如果你想这样做的对象 - 关系映射,然后SQLAlchemy的做业务,你可以考虑要么自己的声明语法或另一层如的药剂它位于上SQLAlchemy的顶部和提供增加的易用性更常见的用例。

其他提示

我不认为有一个“正确”的方式做到这一点在Python,也许除了走一步,用自己和数据库之间的另一层。

根据不同的原因想要使用的DataSource概念(我已经永远只能进来的Java跨),SQLAlchemy的(或类似的东西),可能会解决你的问题,而您不必从头开始。写东西

如果不符合要求,编写自己的包装听起来像一个合理的解决方案。

是,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

(注意,这是一个简单的版本,在我们的multidb数据的相关代码,我们有一个内部有这种逻辑DBConnection的类。)

我只吸了起来,写我自己。它让我补充之类的东西抽象数据库(ORACLE / MySQL的/交通/等),添加日志,与事务回滚等处理错误。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top