django调用oracle存储过程,在Django的ORM中访问存储过程的最佳方式是什么

我们(musicpictures.com/eviscape.com)编写了django代码片段,但它并不是全部(实际上,当时代码只在Oracle上测试过)。

如果您希望重用经过测试的SP代码,或者一个SP调用比多个对数据库的调用快,或者安全性要求对数据库进行适度访问,或者查询非常复杂/多步骤,则存储过程是有意义的。我们对Oracle和Postgres数据库都使用了混合模型/SP方法。

诀窍是让它易于使用并保持“django”的风格。我们使用make_instance函数来获取游标的结果,并创建由游标填充的模型的实例。这很好,因为光标可能返回其他字段。然后,您可以在代码/模板中使用这些实例,这与普通的django模型对象非常类似。def make_instance(instance, values):

'''

Copied from eviscape.com

generates an instance for dict data coming from an sp

expects:

instance - empty instance of the model to generate

values - dictionary from a stored procedure with keys that are named like the

model's attributes

use like:

evis = InstanceGenerator(Evis(), evis_dict_from_SP)

>>> make_instance(Evis(), {'evi_id': '007', 'evi_subject': 'J. Bond, Arch

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值