Python 使用django从外部数据库将数据拉入模板

Python 使用django从外部数据库将数据拉入模板,python,mysql,xml,django,json,Python,Mysql,Xml,Django,Json,我将尝试构建一个web应用程序,用户可以访问url、登录并查看报告和其他信息。但是,报告的数据存储在外部数据库中。这是一个MySQL数据库,我将访问它 我对谷歌做了一些研究,但没有找到多少例子。我已经读了一些关于连接多个数据库的书,所以看起来我可以连接到数据库了 下一部分是我被困的地方。数据库中的数据将一直更新。我不想编辑信息,也不想覆盖任何内容。我只想能够连接到数据库拉所需的信息,然后通过用户能够看到的模板查看它。首先,由于数据一直在更新,这会成为一个问题吗?(我希望不是!) 一旦我连接到数据

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

我对谷歌做了一些研究,但没有找到多少例子。我已经读了一些关于连接多个数据库的书,所以看起来我可以连接到数据库了

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

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


我对python/django相当陌生,因此非常感谢您的帮助。如果您需要更多信息,请提前询问并感谢。:)

如果数据正在更新,就不会有问题

现在,要从数据库中检索数据,首先必须导入相关的模型 在你看来

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

要使您对数据库的访问成为“只读”,我想最好的选择是使用SELECT创建一个用于MySQL端的受限数据库:

GRANT SELECT ON target_database.* TO your_user@'your_host' IDENTIFIED BY 'your_password';
这将确保在任何情况下更新/更改都会成功

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

根据您希望如何显示数据,您可能需要将其转换为其他格式


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

没问题!我总是这样做

至于“不要编辑或更新数据”,只是不要在你的应用程序中添加任何会更新数据的内容。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在同一个数据库中创建表,可能会简化工作。

感谢您的回复,为我提供了足够的信息。我是否需要安装一个新的应用程序来将信息拉入一个新的models.py文件?此外,当数据被拉入模型时,信息是否会每次更新?我刷新页面时,就好像在模板上显示一样?MySQL类不需要单独的应用程序,但欢迎您创建它。我现在正在看我的代码,我把我的远程设备设置为模型的子模块。(myapp/models,myapp/models/somethingelse,myapp/models/anotherthing)。这是因为在我的例子中,我的应用程序/模型中有一些项目包装了“somethingelse”和“otherthing”中的实例。您也可以创建一个新的应用程序来隔离它,或者您可以只在所有名称前加前缀。WRT数据更新:如果您使用类似上述示例的内容,那么答案是“是”。每次查询都会执行,并且是最新的。如果您不希望出现这种行为,您必须添加自己的缓存。好的,谢谢,我将尝试将模型添加到我现有的应用程序中,以便进行测试。我要在我的设置文件中设置数据库,如何连接到外部数据库?我是否可以添加数据库所在的IP?请参阅。这里有一个例子。为您的主数据库保留一个“默认”条目,为您的外部数据库保留另一个条目(示例使用“用户”)。有什么方法可以测试与外部数据库的连接吗?像使用GUI一样运行脚本吗?是的,您可以从django.db import connections中使用类似
;c=连接[“外部数据库]。游标()
。您可以将其包装在try/except块中(如果您没有获得任何异常连接成功)。也检查一下。非常好的细节。对于新版本的Django 1.10,这是真的吗?有没有更好的方法来实现这一点?我希望在settings.py中定义外部数据库。