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 和自定义身份验证模型

Django:有没有办法序列化模型字段而不是模型?

在 Django 中使用自定义用户模型总是在模板中返回匿名用户

如何使用django自定义表单保存多个到多个字段

为啥它呈现 django 管理站点而不是自定义注销页面