cx_Oracle持久连接

时间:2018-03-14 14:00:02

标签: python transactions pool cx-oracle persistent

我有一项任务是使用cx_Oracle为两个进程创建持久连接。

需要从第一个进程执行一些请求,而在同一个事务中执行第二个进程的某些请求。

尝试按照

中的描述使用DRCP

http://www.oracle.com/technetwork/articles/dsl/python-091105.html

下一个代码:

<li class="instagram">
            <a target="_blank" href="<?php echo Yii::$app->config->getConstSite("LINK_PAGE_INSTAGRAM"); ?>">
                <i class="icon-instagram"></i>
                <?php if (!empty($followers_in)): ?>
                    <span class="quan"><?= number_format($followers_in["user"]["followed_by"]["count"]) ?></span>
                <?php endif; ?>
                <span>Followers</span>
            </a>
        </li>
    </ul>
</div>

但第三个断言不正确。 可能是我使用了不正确的参数?

连接池可以由单独的进程创建,该进程将存储连接并通过套接字与其他进程通信(可能与在sqlrelay中一样)。也许这样的工具也存在,但我找不到它。 (要求它应该是小而简单和开放)。你知道其中的一些吗?

在@Dmitry的帮助下,http://www.dba-oracle.com/t_packages_dbms_xa.htm创建了使用dbms_xa的工作示例:

#coding: utf-8

import cx_Oracle

con1 = cx_Oracle.connect('user/pass:127.0.0.1:1521/XE:POOLED', cclass='test', purity=cx_Oracle.ATTR_PURITY_NEW)
cur = con1.cursor()
cur.execute('''insert into gui_view (id, name, view_type, title) values (gui_view_s.nextVal, 'TEST_VIEW', 'grid', 'VIEW_TITLE') ''')
cur1 = con1.cursor()
cur1.execute('''select id from gui_view where title = 'VIEW_TITLE' ''')
rows_all1 = cur1.fetchall()
assert len(rows_all1) > 0, 'Not Exists!'
con1.close()

con2 = cx_Oracle.connect('user/pass:127.0.0.1:1521/XE:POOLED', cclass='test1', purity=cx_Oracle.ATTR_PURITY_SELF)
cur2 = con2.cursor()
cur2.execute('''select id from gui_view where title = 'VIEW_TITLE' ''')
rows_all = cur2.fetchall()
assert len(rows_all) == 0, 'Exist!'

con3 = cx_Oracle.connect('user/pass:127.0.0.1:1521/XE:POOLED', cclass='test')
cur3 = con3.cursor()
cur3.execute('''select id from gui_view where title = 'VIEW_TITLE' ''')
rows_all3 = cur3.fetchall()
con3.close()

assert len(rows_all3) > 0, 'Not Exists!'

有效。 可能会对某人有所帮助。 如果您对任务有其他想法,请写在这里。

0 个答案:

没有答案