Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
55 / 55 / 16
Регистрация: 25.03.2013
Сообщений: 178
1

Правильно составить запрос к базе данных

04.03.2014, 17:30. Показов 2253. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Только недавно начал изучать django, плюс к этому я не силен в sql, поэтому возможно вопрос из матчасти. Хочу выяснить для себя одну штуку, поэтому пример по сути надуманный.
Я создал две модели(они же таблицы в бд как я понимаю): товары и их цены таким образом "models.py"
Python
1
2
3
4
5
6
7
8
9
from django.db import models
 
# Create your models here.
class Goods(models.Model):
    name = models.CharField(max_length=40, null=False, blank=False)
 
class Price(models.Model):
    price = models.IntegerField(blank=False)
    price_goods = models.ForeignKey(Goods)
- я не шарю в нормализации баз данных, но такое разделение сущности Товар я насколько понимаю отстой?
Потом я хочу с помощью представления вывести таблицу товаров с колонками наименование товара и цена. Но откровенно говоря не знаю что делать. Как можно вывести товар и цену вместе с разных таблиц? Нужно по идее использовать аналог JOIN так? Использовать при этом связанность объектов? Или использовать select_related()? Но как это сделать я не допираю...
"view.py"
Python
1
2
3
4
5
6
from django.shortcuts import render, render_to_response
from pricing.models import Goods, Price
# Create your views here.
 
def table(request):
    return render_to_response('table.html', {'goods': Goods.objects.all(), 'price':Price.objects.all()})
"table.html"
Python
1
2
3
4
5
6
7
8
9
{% block table %}
<table>
    <th>Наименование товара</th><th>Цена</th>
    {% for good in goods %}
        <tr><td>{{ good.name }}</td>
        <td>{{ price.price }}</td></tr>
    {% endfor %}
</table>
{% endblock %}
использую python 2.7.3 django 1.6.2. Заранее спасибо.

Добавлено через 2 часа 53 минуты
Нашёл такое решение с использованием values():
"view.py"
Python
1
2
def table(request):
    return render_to_response('table.html', {'goods': Price.objects.all().values('price','price_good__name')})
"table.html"
Python
1
2
3
4
5
6
7
8
9
{% block table %}
<table>
    <th>Наименование товара</th><th>Цена</th>
    {% for i in goods %}
        <tr><td>{{ i.price_good__name }}</td>
        <td>{{ i.price }}</td></tr>
    {% endfor %}
</table>
{% endblock %}
Добавлено через 37 минут
Если есть более правильный вариант, то подскажите пожалуйста.
И ещё вопрос, если никто ни против, задам его здесь. Хочу например хранить цены в таблицы в отсортированном виде, след. нужно использовать индекс к полю цены (так ли это? может я неправильно понимаю назначение индексов ):
Python
1
2
3
class Price(models.Model):
    price = models.IntegerField(blank=False, db_index=True )
    price_goods = models.ForeignKey(Goods)
вроде как тут, но не помогает.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2014, 17:30
Ответы с готовыми решениями:

Как правильно составить запрос к базе данных?
Здравствуйте. Нужна помощь в составлении запроса к базе данных. Есть некоторая база данных в ней...

PDO как составить правильно запрос к базе данных
Приветствую господа профессионалы, прошу прошения за свою тупость, не могу разобраться с pdo, вот...

Как правильно составить запрос к базе?
Есть таблица produkts. У этой таблицы есть связи &quot;многие ко многим&quot; с 3 другими таблицами &quot;color&quot;,...

Правильно составить запрос mysql к базе магазина prestashop
Добрый вечер. Есть виджет для престы, но суть не в том, надо правильно составить mysql запрос для...

7
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
04.03.2014, 22:43 2
Zarex,
Цитата Сообщение от Zarex Посмотреть сообщение
Если есть более правильный вариант, то подскажите пожалуйста.
И ещё вопрос, если никто ни против, задам его здесь. Хочу например хранить цены в таблицы в отсортированном виде, след. нужно использовать индекс к полю цены (так ли это? может я неправильно понимаю назначение индексов ):
это уже Meta данные для модели: ordering называется тут почитайте.

Добавлено через 59 секунд
Zarex, а зачем вы
Цитата Сообщение от Zarex Посмотреть сообщение
8
9
from django.db import models
# Create your models here.
class Goods(models.Model):
* * name = models.CharField(max_length=40, null=False, blank=False)
class Price(models.Model):
* * price = models.IntegerField(blank=False)
* * price_goods = models.ForeignKey(Goods)
ForeignKey кинули?

Добавлено через 52 секунды
Вроде у товара уникальная цена и все дела, как бы логичнее в goods создать поле price, а не вытворять такое.
0
55 / 55 / 16
Регистрация: 25.03.2013
Сообщений: 178
04.03.2014, 22:48  [ТС] 3
Wolkodav, простите что значит кинул? Недопонял вас скорее всего, но отвечу следующее: я ж должен знать какая цена какому товару соответствует. поэтому внешний ключ и использую. Или что не так? Должен сказать я специально разделил товары и цены, мне нужно проработать именно такую ситуацию.
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
04.03.2014, 22:50 4
Zarex, просто логику мне объясните? Ну это лишено всякой логики. Кинул, в смысле типо мостика между таблицами).
1
55 / 55 / 16
Регистрация: 25.03.2013
Сообщений: 178
04.03.2014, 23:00  [ТС] 5
ничего лучше не придумал просто)
А подскажите, я честно говоря думал что индексы отвечают за оптимизацию поиска по полю и соответственно они сортируют таблицу по полю этого индекса. А счас получается что это не так. я ошибался в своем понятии sql или это специфика django что за это отвечает мета инфа?
Извините если вопрос глупый.
0
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
04.03.2014, 23:07 6
Zarex, meta инфа отвечает:
1) за саму таблицу как за объект
2) часть вещей связанные с админкой
Про индексы - сортируются по индексам, а не по значениям в полях, учитет мат-часть, там все хитрее немного, чем банальная сортировка по значению в полях.

Добавлено через 3 минуты
тут почитай про метта.
1
55 / 55 / 16
Регистрация: 25.03.2013
Сообщений: 178
04.03.2014, 23:15  [ТС] 7
Wolkodav, да я на джангобуке лажу потиху, просто бывает не замечаешь то что нужно.

Не по теме:

А может вы посоветуете что по sql (чтобы без лишней воды, желательно сжато и с примерами на практике)

0
Wolkodav
04.03.2014, 23:18     Правильно составить запрос к базе данных
  #8

Не по теме:

Zarex, если честно, то решал тут на сайте, есть сжатая теория, есть задачи( много), но как бы чистый SQL для джанги на начальном уровне почти не нужен

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.03.2014, 23:18

Как правильно сделать запрос поиска в базе данных?
Здравствуйте. Подскажите пожалуйста, как решить задачу: Есть таблица БД: tbl_post с...

Невозможно подключиться к базе данных. Как правильно составить строку соединения
что-то со строкой подключения не правильно выбрасывает ошибку &quot;При установлении соединения с...

Как правильно составить запрос на получения данных
У меня есть рабочий запрос на получение данных. Но работает он только если искать по id :wall:...

Как правильно составить SQL запрос SELECT PDO PHP для получения данных по двум полям
Питаюсь реализовать получение данных с БД по двум строкам SELECT * FROM `table_products` WHERE...

Как сделать правильно запрос в базе даних
Здравствуйте, подскажите пожалуйста, как сделать правильно запрос из бази даних чтобы выбирались...

Составить запрос к базе
добрый UPDATE b_iblock_element SET DETAIL_TEXT = CONCAT ('&lt;p&gt;', DETAIL_TEXT) Нужно условие,...

Составить запрос к базе
Добрый Не могу разобраться Почему это работает DELETE FROM b_file WHERE (b_file.ID IN...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru