Что лучший способ состоит в том, чтобы получить доступ к хранимым процедурам в ORM Django

Похоже, что в его текущем местоположении по умолчанию сломан easy_install:

$ which easy_install /usr/bin/easy_install

. Способ преодоления заключается в использовании пакетов easy_install в сайтах. Например:

$ sudo python /Library/Python/2.7/site-packages/easy_install.py boto

25
задан kkubasik 30 April 2009 в 05:03
поделиться

5 ответов

Мы (musicpictures.com / eviscape.com) написали фрагмент кода django, но это не вся история (на самом деле этот код тестировался только в Oracle в то время).

Хранимые процедуры делают ощущать, когда вы хотите повторно использовать проверенный и проверенный код SP, или когда один вызов SP будет быстрее, чем несколько обращений к базе данных - или когда безопасность требует модерируемого доступа к базе данных - или когда запросы очень сложные / многошаговые. Мы используем гибридный подход модель / SP против баз данных Oracle и Postgres.

Хитрость заключается в том, чтобы упростить использование и сохранить его как «django». Мы используем функцию make_instance, которая берет результат курсора и создает экземпляры модели, заполненные курсором. Это хорошо, потому что курсор может вернуть дополнительные поля.

23
ответ дан 28 November 2019 в 21:06
поделиться

Cx_Oracle может использоваться. Кроме того, довольно полезно, когда у нас нет доступа к развернутому коду производства, и потребность возникает для внесения существенных изменений в базе данных.

import cx_Oracle
try:
    db = dev_plng_con
    con = cx_Oracle.connect(db)
    cur = con.cursor()
    P_ERROR = str(error)
    cur.callproc('NAME_OF_PACKAGE.PROCEDURENAME', [P_ERROR])

except Exception as error:
    error_logger.error(message)
0
ответ дан 28 November 2019 в 21:06
поделиться

Не.

Серьезно.

Переместите логику хранимой процедуры в свою модель, где она принадлежит.

Помещение некоторого кода в Django и некоторого кода в базу данных - кошмар обслуживания. Я провел слишком много из моих 30 с лишним лет в ИТ, пытаясь навести порядок в этом виде.

-1
ответ дан 28 November 2019 в 21:06
поделиться

Вы должны использовать утилиту подключения в Django:

from django.db import connection

cursor = connection.cursor()
cursor.execute("SQL STATEMENT CAN BE ANYTHING")

, тогда вы можете получить данные:

cursor.fetchone()

или:

cursor.fetchall()

Подробнее здесь: http://docs.djangoproject.com/en/dev/topics/db/sql/

16
ответ дан 28 November 2019 в 21:06
поделиться

Если вы хотите посмотреть на реально работающий проект, использующий SP, посмотрите мини-книги . Множество пользовательских SQL и использует Postgres pl / pgsql для SP. Я думаю, что они собираются удалить SP в конце концов (оправдание в trac ticket 92 ).

2
ответ дан 28 November 2019 в 21:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: