Извлечение данных в шаблон из внешней базы данных с помощью django

Я собираюсь создать веб-приложение, в котором пользователи могут просматривать URL, входить в систему, просматривать отчеты и другую информацию. Однако данные для отчетов хранятся во внешней базе данных. Это'база данных MySQL, которую яя буду иметь доступ к. Я

Мы провели небольшое исследование на Google и не повезло найти какие-либо примеры. Я'мы немного изучили возможность подключения к нескольким базам данных -https://docs.djangoproject.com/en/dev/topics/db/multi-db/ Похоже, я могу подключиться к базе данных в порядке.

Следующая часть, где яЯ застрял. Данные в базе данных будут постоянно обновляться. Я нея не хочу иметь возможность редактировать информацию, и при этом я не хочу иметь возможность что-либо перезаписывать. Я просто хочу иметь возможность подключиться к БД, получить необходимую информацию и затем просмотреть ее через шаблон, чтобы пользователь мог ее увидеть. Прежде всего, потому что данные постоянно обновляются, это будет проблемой? (Надеюсь нет!)

Однажды я'Подключившись к базе данных, как лучше всего извлечь данные и затем поместить их в формат, который я могу вывести в шаблон? Нужно ли мне импортировать данные в модели, а затем управлять с представлением. Или мне нужно преобразовать данные с помощью JSON или XML?

Я довольно плохо знаком с Python / Django, поэтому любая помощь будет высоко ценится. Если вам нужна дополнительная информация, пожалуйста, спросите и спасибо заранее. :)

Ответы на вопрос(3)

Теперь для извлечения данных из базы данных сначала необходимо импортировать соответствующую модель в ваши представления.

from app_name.models import model_name
def view_report(request):
    r_name=request.POST.get('r_name','default_value')
    r=model_name.objects.get(report_name=r_name)
    return render_to_response('url',{'r':r})

В вашем шаблоне

{{r.report_desc}}

только для чтенияЯ полагаю, что лучший вариант - создать ограниченное использование на стороне MySQL только с SELECT:

GRANT SELECT ON target_database.* TO [email protected]'your_host' IDENTIFIED BY 'your_password';

Это обеспечит успешное обновление / изменение в любом случае.

Обычно вы моделируете свои таблицы базы данных как объекты, потому что это облегчает работу с записями базы данных из Python и дает вам некоторую абстракцию, но вы можете выполнитьнеобработанные SQL-запросы если вы чувствуете, что это правильно.

В зависимости от того, как вы хотите представить свои данные, вам может потребоваться преобразовать их во что-либо.

Если вы хотите сделать свое приложение более динамичным (например, получать новые данные с 10-секундными интервалами и представлять их пользователю без обновления), вам, вероятно, потребуется преобразовать их в какой-то формат, более подходящий для использования с AJAX, например JSON или XML (у Django есть некоторыесериализация инструменты готовы к использованию). Если вы просто хотите "статический» Приложение (т. е. пользователь щелкает ссылку / кнопку и переходит на страницу, на которой представлены данные, а для обновления пользователю необходимо обновить страницу), вы можете использовать объекты, полученные из базы данных в вашем представлении.

 nomad29 мар. 2017 г., 19:09
Действительно приятная деталь. Верно ли это с новой версией Django 1.10, есть ли лучший способ сделать это? Я бы лучше определил мою внешнюю базу данных в settings.py.
 JDavies20 мая 2013 г., 16:32
Есть ли способ проверить соединение с внешней БД? Как запустить скрипт, как если бы я использовал графический интерфейс?
 Salem20 мая 2013 г., 17:01
Да, вы можете использовать что-то вродеfrom django.db import connections; c=connections["external_db"].cursor(), Вы можете обернуть это в блок try / кроме (если вы неЛюбое исключение соединение было успешным). Также проверьтеэтот.
Решение Вопроса

Насколько "дон»редактировать или обновлять данныепросто неt добавить в ваше приложение что-нибудь, что обновит данные. СалемПредложение об использовании разрешений на стороне MySQL также является хорошей идеей.

Для получения данных у вас есть два варианта:

1) Вы можете создавать модели Django, которые соответствуют вашим таблицам в базе данных MySQL. Вы можете сделать это вручную, или вы можете использовать "inspectdb» команда с manage.py, чтобы дать себе хорошую отправную точку. Затем сделайте что-то вроде этого:

def myview(request):
  rows = MyModel.objects.using('mysql').all()
  return render_to_response("mytemplate.html", {"rows" : rows })

2) Вы можете управлять соединениями и запросами вручную в вашем приложении. Это совершенно верно в представлении:

def myview(request):
  conn = MySQLdb.connect("connection info here")
  try:
    cursor = conn.cursor()
    cursor.execute("select * from mytable")
    rows = cursor.fetchall()
  finally:
    conn.close()

  return render_to_response("mytemplate.html", {"rows" : rows})

наконец - Django совершенно счастлив использовать MySQL в качестве базы данных. Это может упростить ситуацию, если ваш администратор базы данных позволит Django создавать свои таблицы прямо в той же базе данных.

 JDavies17 мая 2013 г., 20:03
Еще раз спасибо, извините, я могуне видите, как вы настраиваете соединение с внешней БД? Не могли бы вы вставить часть своего кода в качестве примера? Не раздавая никакой личной информации, конечно :)
 Chris Curvey17 мая 2013 г., 17:21
увидетьdocs.djangoproject.com/en/dev/topics/db/multi-db, там'Это пример прямо здесь. держать 'дефолт' запись для вашей основной базы данных и другая запись (в примере используется 'пользователей) для вашего внешнего БД
 JDavies17 мая 2013 г., 17:12
Хорошо спасибоПопробую добавить модели в мое приложение для тестирования. Я'собираюсь настроить БД в моем файле настроек, как мне подключиться к внешней БД? Могу ли я просто добавить IP, где размещена БД?
 Chris Curvey17 мая 2013 г., 14:49
Ты ненеобходимость отдельное приложение для классов MySQL, но вы можете его создать. Я'Я сейчас смотрю на мой код, и мои удаленные компоненты настроены как субмодули моделей. (myapp / models, myapp / models / что-то другое, myapp / models / другое). Тот's потому что в моем случае у меня есть элементы в myapp / models, которые переносят экземпляры из "что-то другое" а также "Другая вещь", Вы также можете создать новое приложение, чтобы отделить его, или вы можете просто префикс всех имен.
 Chris Curvey17 мая 2013 г., 14:51
Обновления данных WRT: если вы используете что-то вроде приведенных выше примеров, то ответ «да", Запрос будет выполняться каждый раз и быть актуальным. Вы'Я должен добавить свой собственный кеширование, если вы нене хочу такого поведения.
 JDavies17 мая 2013 г., 12:58
Спасибо за все ваши ответы, дает мне достаточно информации, чтобы продолжить. Нужно ли мне установить новое приложение, чтобы перенести информацию в новый файл models.py? Также, когда данные извлекаются в модели, будет ли информация обновляться каждый раз, когда я обновлял страницу, как если бы они отображались в шаблоне?

Ваш ответ на вопрос