Уведомления

Группа в Telegram: @pythonsu

#1 Май 5, 2010 16:25:24

Kamber
От:
Зарегистрирован: 2010-05-05
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

Django и Postgre

Уважаемое сообщество….

Вопрос новичка… возможно ли в джанге реализация следующих моментов
1. Запуск хранимой процедуры (функции) Postgre
2. Выполнение собственного SQL запроса и получение вразумительного ответа
3. Организация просмотра View базы Postgre

Заранее спасибо



Офлайн

#2 Май 7, 2010 11:32:14

tmt
От:
Зарегистрирован: 2010-03-26
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Django и Postgre

Kamber
Уважаемое сообщество….

Вопрос новичка… возможно ли в джанге реализация следующих моментов
1. Запуск хранимой процедуры (функции) Postgre
2. Выполнение собственного SQL запроса и получение вразумительного ответа
3. Организация просмотра View базы Postgre

Заранее спасибо
1. Поскольку django ORM пытается “обезопасить” вас от работы с БД напрамую то “чистой” поддержки SP нет.
Но вы всегда можете использовать http://docs.djangoproject.com/en/dev/topics/db/sql/
или http://www.djangosnippets.org/snippets/118
2 и 3 - см п.1 По поводу “вразумительного ответа” смотрим “Mapping query fields to model fields” в том же линке.



Офлайн

#3 Май 7, 2010 11:45:45

tmt
От:
Зарегистрирован: 2010-03-26
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Django и Postgre

Плюс, если поразмыслить, то сомневаюсь что полная поддержка SP на уровне ORM вообще нужна (или даже возможна).
Каждая БД использует собственный язык для написания сторед-процедур. А некоторые вообще их не имеют, тот же sqlite.
К тому же в том же Постгресе процедура может быть написана на том же питоне или перле. Плюс Оракл… и понеслась.
Нахождение правильного знаменателя превратится в поиск “сферического коня в вакууме”.
Надеюсь суть понятна.



Офлайн

#4 Май 23, 2010 18:22:45

Kamber
От:
Зарегистрирован: 2010-05-05
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

Django и Postgre

Не совсем…. есть работающая БД на PostgreSQL. В БД есть реализованные и работающие SP. И как их запускать???
Посмотрел в направлении http://docs.djangoproject.com/en/dev/topics/db/sql/ - все хорошо, только у меня Django 1.1. и raw не поддерживается…
Сделал выполнение произвольного SQL через курсор - возвращается набор строк.
Внимание вопрос:
Возможно ли полученный набор передать в Web - причем таким образом, чтобы на странице можно было указать конкретное поле из набора поля. Например {{raw.Поле1}}



Офлайн

#5 Май 24, 2010 17:06:39

tmt
От:
Зарегистрирован: 2010-03-26
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Django и Postgre

Kamber
Не совсем…. есть работающая БД на PostgreSQL. В БД есть реализованные и работающие SP. И как их запускать???
Посмотрел в направлении http://docs.djangoproject.com/en/dev/topics/db/sql/ - все хорошо, только у меня Django 1.1. и raw не поддерживается…
Сделал выполнение произвольного SQL через курсор - возвращается набор строк.
Внимание вопрос:
Возможно ли полученный набор передать в Web - причем таким образом, чтобы на странице можно было указать конкретное поле из набора поля. Например {{raw.Поле1}}
Передать можно все что угодно, и любым образом. =) Но нужно самому заботиться о заполнении нужных в контексте переменных.

Исходя из документации:

Technically, when the template system encounters a dot, it tries the following lookups, in this order:
* Dictionary lookup
* Attribute lookup
* Method call
* List-index lookup

То есть, если в темплейте нужно доступ через точку, ваше “Поле1” должно соответсвовать хотябы одному из вышеперечисленных условий.
А как вы его к етому приведете (автоматически, через мапер, руками или силой мысли =)) это зависит от вас.

П.С.
Не знаю вашей причины невозможности апгрейда на джангу 1.2 (тем более уже релиз).
Но может не стоит изобретать велосипед? В любом случає, удачи Вам.



Отредактировано (Май 24, 2010 17:13:53)

Офлайн

#6 Май 26, 2010 12:41:29

Kamber
От:
Зарегистрирован: 2010-05-05
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

Django и Postgre

Переход на 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)

Офлайн

#7 Май 26, 2010 14:45:30

tmt
От:
Зарегистрирован: 2010-03-26
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Django и Postgre

А так “Поле1” или любое другое выводит? ;)

{% for item in items %}
<li>{{item.Поле1}}</li>
{% endfor %}
Или в модель DB вставте код:
    def __unicode__(self):
return u'%s %s' % (self.Поле1, self.Поле2)
И посмотрите результат:
{% for item in items %}
<li>{{item}}</li>
{% endfor %}



Отредактировано (Май 26, 2010 15:01:54)

Офлайн

#8 Май 26, 2010 15:33:34

Kamber
От:
Зарегистрирован: 2010-05-05
Сообщения: 40
Репутация: +  0  -
Профиль   Отправить e-mail  

Django и Postgre

{% for item in items %}
<li>{{item.Поле1}}</li>
{% endfor %}
Как раз вот так оно и не выводит… именно к этому я и стремлюсь

Добавить код в модель можно - работает.. однако мне необходимо делать разные выборки из БД
т.е.
Поле1 Поле2
А на другом экране
Поле 1 Поле4 Поле5
Если нет возможности менять выборку полей - то это не устраивает



Офлайн

#9 Май 26, 2010 15:40:06

tmt
От:
Зарегистрирован: 2010-03-26
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Django и Postgre

Если не выводит, значит не совпадают названия полей в модели и в выборке.
Добавте в выборке алиасы для полей через “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)
As long as the names match, the model instances will be created correctly.
Alternatively, you can map fields in the query to model fields using the translations argument to raw(). This is a dictionary mapping names of fields in the query to names of fields on the model.

Прочитайте внимательно http://docs.djangoproject.com/en/dev/topics/db/sql/#mapping-query-fields-to-model-fields еще раз.



Отредактировано (Май 26, 2010 17:47:02)

Офлайн

#10 Май 26, 2010 15:55:22

tmt
От:
Зарегистрирован: 2010-03-26
Сообщения: 51
Репутация: +  0  -
Профиль   Отправить e-mail  

Django и Postgre

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)
работает?

Можете привести исходный код модели “DB” и структуру таблицы или вьюшки “db_DB” из которой идет выборка?



Отредактировано (Май 26, 2010 16:01:48)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version