我们(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