当前位置:七道奇文章资讯数据防范Oracle防范
日期:2011-01-25 22:55:00  来源:本站整理

借助Oracle数据库实现Python数据长期性-PLSQL[Oracle防范]

赞助商链接



  本文“借助Oracle数据库实现Python数据长期性-PLSQL[Oracle防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

    择要:理解若何操纵 Oracle XML DB、Python 脚本和 PL/SQL 存储历程构建自己的受 Oracle 数据库支持的 Python 利用程序.

    固然 Python 很快在开辟人员之中遍及,但长期以来 Oracle 数据库一向是最超卓的企业级数据库.采取有效的方法将这二者结合在一同是对比令人感爱好的主题,但这实际上是真正的挑衅,因为二者都要付出很多.

    固然遭到告诫,但本文并不会对最出色的 Python 和 Oracle 数据库特点举行概述,而是供应一系列独立的示例.本文借助一个示例让您理解若何采取互补的办法尝试将这两种技术结合利用.特别是,本文将指导您操纵 PL/SQL 存储历程(在 Python 脚本中编排其调用)成立 Oracle 支持的 Python 利用程序,该利用程序在 Python 和数据库中实施业务逻辑.

    正如您将在本文中学习到的,即便是轻型的 Oracle 数据库 10g 快速版 (XE) 也可以得到有效操纵,作为数据驱动的 Web 利用程序的数据库后端,其前端层利用 Python 构建.分外是,Oracle 数据库 XE 支持 Oracle XML DB,这是构建 Web 利用程序时普通需求的一组 Oracle 数据库 XML 技术.

    示例利用程序

    在用户利用您的利用程序时汇集有关用户履行操作的信息成为一种对比风行的接纳用户反馈的机制.普通,相关于让用户明确表达偏好的任何调查来说,并入在线利用程序中的点击跟踪工具可认为您供应有关用户偏好的大量信息.

    举一个简单的例子,假定您想从"OTN — 新文章 RSS"页面中选取三个最新的 Oracle 技术网 (OTN) 文章标题,并将这些链接放到您的站点上.然后,您但愿汇集有关用户在您的站点上跟随这些链接中的每个链接的次数的信息.这就是我们的示例将要做的.目前,让我们试着弄清若何实现全部这些功效.首先,必须决意如安在利用程序层之间分发业务逻辑.实际上,决意如安在利用程序层之间分发业务逻辑大概是筹划数据库驱动的利用程序最具挑衅性的部份.固然履行业务逻辑普通有多种办法,但是您的工作是找到最有效的办法.作为普通的经验,当筹划数据库驱动的利用程序时,您应当认真考虑数据库中关键数据处理逻辑的实现.这种办法可以帮忙您削减与在 Web 服务器和数据库之间发送数据相关的网络开销,并且可以减轻 Web 服务器的负担.

    将全部这些理论利用到我们的示例上,比方,将得到插入到数据库中的文章具体信息的负担放到在数据库中成立的存储历程上,这样 Web 服务器没必要再处理与保护数据完好性有关的任务.这在实践中的意义是您没必要编写特定 Python 代码,这些代码负责跟踪数据库中能否存在与其链接被点击的文章有关的记录,假如不存在,则插入该记录,然后从"OTN — 新文章 RSS"页面中获得所需的全部具体信息.通过让数据库自己跟踪此类事情,您可以得到具有更高可扩大性且更不易出错的办理筹划.在本例中,Python 代码将只负责从 RSS 页面获得文章链接,并在用户单击某个文章链接时向数据库发送一条消息.

    图 1 给出了示例组件若何彼此交互以及若何与外部源交互的图形描写.

图 1:示例利用程序工作原理的高级视图.

    本文的别的部份介绍若何实现此示例利用程序.有关若何设置和启动此示例的扼要描写,可以参考示例代码根目录下的 readme.txt 文件.

    预备工作环境

    要构建此处谈论的示例,您需求安装以下软件组件(拜见 Downloads portlet)并使其在您的系统中正常工作:

    Apache HTTP Server 2.x

    Oracle 数据库 10g 快速版

    Python 2.5 或更高版本

    mod_python 模块

    cx_Oracle 模块

    有关若何安装上述组件的具体阐明,可以参考另一篇 OTN 文章"为 Python Server Pages 和 Oracle 构建快速 Web 开辟环境"(作者:Przemyslaw Piotrowski).

    计划底子数据库

    普通来说,最好从计划底子数据库开始.假定您成立了一个用户情势并授与其成立和操作情势对象所需的全部权限,那么第一步就是成立底子表.在这种特别情形下,您将需求一个唯一的名为 otn_articles_rss 的表,成立该表的方法以下:

CREATE TABLE otn_articles_rss (
guid VARCHAR2(100) PRIMARY KEY,
title VARCHAR2(200),
pubDate VARCHAR2(32),
link VARCHAR2(200),
clicks INTEGER
);

    下一步是计划一个将在 Python 代码中调用的名为 count_clicks 的存储历程,它更新 otn_articles_rss 表中的数据.持续 count_clicks 历程之前,您必须先答复以下问题:当 count_clicks 尝试更新还没有插入到 otn_articles_rss 表中的文章记录的 clicks 字段时,会发生什么情形呢?假定一个新项目方才增添到 RSS 页面,然后指向该项目的链接呈目前您的站点上.当有人单击该链接时,系统将从负责处理指向 OTN 文章的链接上履行的单击次数的 Python 代码中调用 count_clicks PL/SQL 历程.明显,处理第一次单击时,在 count_clicks 历程中发出的 UPDATE 语句将失利,因为目前还没有要更新的行.

    要适应此类情形,您可以在 count_clicks 历程中实现一个 IF 块,假如由于 UPDATE 找不到指定的记录而将 SQL%NOTFOUND 属性设置为 TRUE 时,该块会施展作用.在该 IF 块中,只要指定了 guid 和单击次数,您便可以先将一个新行插入到 otn_articles_rss 表中.之后,您应当提交这些更改,以便这些更改立便可用于其他用户会话,这些会话大概也需求更新新插入的文章记录的 clicks 字段.最后,您应当更新该记录,设置其 title、pubDate 和 link 字段.该逻辑可以作为一个单独的历程(比方 add_article_details)来实现,该历程的成立方法以下:

CREATE OR REPLACE PROCEDURE add_article_details (gid VARCHAR2, clks NUMBER) AS
  item XMLType;
  heading VARCHAR2(200);
  published VARCHAR2(32);
  url VARCHAR2(200);
BEGIN
  SELECT extract(httpuritype.createuri(
                   'http://feeds.delicious.com/v2/rss/OracleTechnologyNetwork/otntecharticle').getXML(),
                   '//item[contains(guid, "'||gid||'")>0]')
       INTO item FROM DUAL;
  SELECT extractValue(item, '//title'),
         extractValue(item, '//pubDate'),
         extractValue(item, '//link')
       INTO heading, published, url FROM DUAL;
  UPDATE otn_articles_rss SET
   title = heading,
   pubDate = published,
   link = url,
   clicks = clicks + clks
  WHERE guid = gid;
END;
/

    正如您所见,该历程承受两个参数.gid 是其链承遭到单击的文章的 guid.clks 是文章查看总次数的增量.在该历程主体中,您得到 RSS 文档的所需部份作为 XMLType 实例,然后提失信息,之后该信息将当即用于填充 otn_articles_rss 中与正在处理的 RSS 项目关联的记录.

    借助 add_article_details,您可以持续下一环节,按照以下方法成立 count_clicks 历程:

CREATE OR REPLACE PROCEDURE count_clicks (gid VARCHAR2, clks NUMBER) AS
BEGIN
  UPDATE otn_articles_rss SET
    clicks = clicks + clks
   WHERE guid = gid;
  IF SQL%NOTFOUND THEN
    INSERT INTO otn_articles_rss(guid, clicks) VALUES(gid, 0);
    COMMIT;
    add_article_details (gid, clks);
  END IF;
  COMMIT;
END;
/


  以上是“借助Oracle数据库实现Python数据长期性-PLSQL[Oracle防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • 借助Oracle数据库实现Python数据长期性-PLSQL
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .