Django 使用自定义 SQL 而不是模型将 JSON 对象返回到模板
Posted
技术标签:
【中文标题】Django 使用自定义 SQL 而不是模型将 JSON 对象返回到模板【英文标题】:Django using custom SQL instead of models to return JSON object to template 【发布时间】:2016-12-06 21:44:18 【问题描述】:我目前能够从我的 models.py 和 mysql 数据库中检索 JSON 数据/对象,并将该 JSON 对象发送到我的模板。我如何能够使用自定义 SQL 从 MySQL 检索数据,然后将其转换为 JSON 对象以发送到我的模板。我基本上根本不想使用models.py。这是我在使用 models.py 时在 views.py 中的内容:
def startpage(request):
platforms = Platform.objects.select_related().values('platformtype')
return render(request, 'html1.html', 'platforms_as_json' : json.dumps(list(platforms)),)
这是我目前所拥有的:
def my_custom_sql(self):
cursor = connection.cursor()
cursor.execute("SELECT platformtype FROM Platform", [self.Platform])
row = cursor.fetchone()
return row
除了不使用 models.py 并在我的视图中使用自定义 SQL 查询之外,我如何能够做同样的事情?谢谢
更新:
def startpage(request):
platforms = my_custom_sql()
return render(request, 'Html1.html', 'platforms_as_json' : json.dumps(list(platforms)), )
def my_custom_sql():
cursor = connection.cursor()
cursor.execute("SELECT HWPlatformName FROM hwplatform", None)
rows = cursor.fetchall()
return rows
现在我可以将数据放到我的模板中,但我不相信它给了我正确的 JSON 格式..
【问题讨论】:
为什么要避免使用模型?这是使用 Django(带有迁移)的卖点之一 (1.)你看过Django's docs on emitting raw SQL吗? (2.) 埃米尔所说的 我知道,我以前使用过它们,模型让生活变得如此轻松。我需要为我的 Web 应用程序编写其他脚本,并且不想依赖 Django 模型。是的,我查看了文档。 你可以在外部脚本中使用 Django 模型,所以这不是一个很有说服力的理由。 是的,但这更像是一种学习体验。我也不想在 MySQL 数据库中创建所有的 django 和 admin 表。 【参考方案1】:如果您想要模型的实例,您可以在 objects 属性上寻找 raw
方法。
platforms = Platform.objects.raw('SELECT * FROM Platform')
如果您只是从服务器中查找内容,那么您可以从 SQL 查询中返回值:
platforms = my_custom_sql() # Or call my_custom_sql statically.
如果您正在寻找延迟人口,您可以将 yield
语句放入您的 my_custom_sql
函数中。
【讨论】:
我认为 raw 方法给了你一个模型对象,对吗? 我的目标是不使用任何模型对象。这可能吗? @Carbon 附录有帮助吗? 我已经尝试过 platforms = my_custom_sql() 但是当我尝试运行我的 Django 服务器时它给了我错误。它说“my_custom_sql() 缺少 1 个必需的位置参数:'self'” 如果我的数据库有一个名为“Platform”的表和列“Platform_ID”和“platformtype”以上是关于Django 使用自定义 SQL 而不是模型将 JSON 对象返回到模板的主要内容,如果未能解决你的问题,请参考以下文章
Django:使用带有 executemany 和 MySQL 的自定义原始 SQL 插入
Django 1.5:UserCreationForm 和自定义身份验证模型