Форум сайта python.su
Уважаемое сообщество….
Вопрос новичка… возможно ли в джанге реализация следующих моментов
1. Запуск хранимой процедуры (функции) Postgre
2. Выполнение собственного SQL запроса и получение вразумительного ответа
3. Организация просмотра View базы Postgre
Заранее спасибо
Офлайн
Kamber1. Поскольку django ORM пытается “обезопасить” вас от работы с БД напрамую то “чистой” поддержки SP нет.
Уважаемое сообщество….
Вопрос новичка… возможно ли в джанге реализация следующих моментов
1. Запуск хранимой процедуры (функции) Postgre
2. Выполнение собственного SQL запроса и получение вразумительного ответа
3. Организация просмотра View базы Postgre
Заранее спасибо
Офлайн
Плюс, если поразмыслить, то сомневаюсь что полная поддержка SP на уровне ORM вообще нужна (или даже возможна).
Каждая БД использует собственный язык для написания сторед-процедур. А некоторые вообще их не имеют, тот же sqlite.
К тому же в том же Постгресе процедура может быть написана на том же питоне или перле. Плюс Оракл… и понеслась.
Нахождение правильного знаменателя превратится в поиск “сферического коня в вакууме”.
Надеюсь суть понятна.
Офлайн
Не совсем…. есть работающая БД на PostgreSQL. В БД есть реализованные и работающие SP. И как их запускать???
Посмотрел в направлении http://docs.djangoproject.com/en/dev/topics/db/sql/ - все хорошо, только у меня Django 1.1. и raw не поддерживается…
Сделал выполнение произвольного SQL через курсор - возвращается набор строк.
Внимание вопрос:
Возможно ли полученный набор передать в Web - причем таким образом, чтобы на странице можно было указать конкретное поле из набора поля. Например {{raw.Поле1}}
Офлайн
KamberПередать можно все что угодно, и любым образом. =) Но нужно самому заботиться о заполнении нужных в контексте переменных.
Не совсем…. есть работающая БД на PostgreSQL. В БД есть реализованные и работающие SP. И как их запускать???
Посмотрел в направлении http://docs.djangoproject.com/en/dev/topics/db/sql/ - все хорошо, только у меня Django 1.1. и raw не поддерживается…
Сделал выполнение произвольного SQL через курсор - возвращается набор строк.
Внимание вопрос:
Возможно ли полученный набор передать в Web - причем таким образом, чтобы на странице можно было указать конкретное поле из набора поля. Например {{raw.Поле1}}
Отредактировано (Май 24, 2010 17:13:53)
Офлайн
Переход на 1.2 состоялся - проблема осталась.
Может кто-нибудь на пальцах объяснить - как из полученной строки получить значения полей.
views.py
row = DB.objects.raw('SELECT * FROM db_DB')
return render_to_response('test.html', {'items': row})
{% for item in items %}
<li>{{item}}</li>
{% endfor %}
DB object
DB object
DB object
Поле1 Поле2 Поле3 и т.д.
Поле1 Поле2 Поле3
Поле1 Поле2 Поле3
Отредактировано (Май 26, 2010 12:47:13)
Офлайн
А так “Поле1” или любое другое выводит? ;)
{% for item in items %}
<li>{{item.Поле1}}</li>
{% endfor %}
def __unicode__(self):
return u'%s %s' % (self.Поле1, self.Поле2)
{% for item in items %}
<li>{{item}}</li>
{% endfor %}
Отредактировано (Май 26, 2010 15:01:54)
Офлайн
{% for item in items %}
<li>{{item.Поле1}}</li>
{% endfor %}
Офлайн
Если не выводит, значит не совпадают названия полей в модели и в выборке.
Добавте в выборке алиасы для полей через “as” чтоб названия совпадали или через аргумент “translations” в raw() и будет вам счастье.
Matching is done by name. This means that you can use SQL's AS clauses to map fields in the query to model fields. So if you had some other table that had Person data in it, you could easily map it into Person instances:
>>> Person.objects.raw('''SELECT first AS first_name,
... last AS last_name,
... bd AS birth_date,
... pk as id,
... FROM some_other_table)
Отредактировано (Май 26, 2010 17:47:02)
Офлайн
KamberПлюс не совсем понял…Как раз вот так оно и не выводит… именно к этому я и стремлюсь{% for item in items %}
<li>{{item.Поле1}}</li>
{% endfor %}
Добавить код в модель можно - работает.. однако мне необходимо делать разные выборки из БД
т.е.
Поле1 Поле2
А на другом экране
Поле 1 Поле4 Поле5
Если нет возможности менять выборку полей - то это не устраивает
{% for item in items %}
<li>{{item.Поле1}}</li>
{% endfor %}
def __unicode__(self):
return u'%s' % (self.Поле1)
Отредактировано (Май 26, 2010 16:01:48)
Офлайн