使用django从外部数据库将数据提取到模板

时间:2013-05-16 19:52:58

标签: python mysql xml django json

我将尝试构建一个用户可以访问网址,登录和查看报告以及其他信息的网络应用程序。但是,报告的数据存储在外部数据库中。这是一个我可以访问的MySQL数据库。

我在谷歌上做了一些研究,没有太多运气找到任何例子。我已经完成了对连接多个数据库的一点阅读 - https://docs.djangoproject.com/en/dev/topics/db/multi-db/所以它看起来我可以连接到数据库了。

下一部分是我被困的地方。数据库中的数据将一直更新。我不希望能够编辑信息,我也不想覆盖任何东西。我只是希望能够连接到DB拉取所需的信息,然后通过模板查看它以便用户能够看到。首先是因为数据一直在更新,这是一个问题吗? (我希望不是!)

一旦我连接到数据库,最好能够提取数据然后将其放入我可以输出到模板的格式中?我是否需要将数据导入模型,然后使用视图进行控制。或者我需要使用JSON或XML转换数据吗?

我对python / django很新,所以任何帮助都会非常感激。如果您需要更多信息,请提前询问并表示感谢。 :)

3 个答案:

答案 0 :(得分:16)

没问题!我一直这样做。

就“不编辑或更新数据”而言,只是不要在应用中添加任何会更新数据的内容。 Salem关于在MySQL端使用权限的建议也是一个好主意。

要检索数据,您有两种选择:

1)您可以创建与MySQL数据库中的表对应的Django模型。您可以手动执行此操作,也可以使用manage.py中的“inspectdb”命令为自己提供一个良好的起点。然后做这样的事情:

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用作数据库。如果你的DBA让Django在同一个数据库中创建表,它可能会简化一些事情。

答案 1 :(得分:1)

如果要更新数据,则没有问题。

现在要从数据库中检索数据,首先必须导入相关模型 在您的观点中

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}}

答案 2 :(得分:1)

为了使您对数据库的访问权限为“只读”,我想最好的选择是在MySQL端创建一个仅使用SELECT的限制:

GRANT SELECT ON target_database.* TO your_user@'your_host' IDENTIFIED BY 'your_password';

这将确保在任何情况下更新/更改都会成功。

通常您将数据库表建模为对象,因为这样可以更轻松地使用Python中的数据库记录并为您提供一些抽象,但如果您认为这是正确的事情,则可以执行raw SQL queries

根据您要呈现数据的方式,您可能需要将其转换为某种内容。

如果您想让您的应用程序更具动态性(例如,以10秒的间隔检索新数据并将其呈现给用户而不刷新),您可能需要将其转换为更适合与AJAX一起使用的格式,像JSON或XML(Django有一些serialization工具可供使用)。如果您只想要一个“静态”应用程序(即:用户单击链接/按钮并转到显示数据的页面,并且要刷新用户必须刷新页面),您可以使用从数据库中检索的对象在你看来。