你可以在没有模型的情况下在 Django 中运行原始 MySQL 查询吗?

Posted

技术标签:

【中文标题】你可以在没有模型的情况下在 Django 中运行原始 MySQL 查询吗?【英文标题】:Can you run a raw MySQL query in Django without a model? 【发布时间】:2020-03-18 18:18:23 【问题描述】:

我还在学习 Django,我刚刚开始接触 mysql 的连接器。我想弄清楚的是我将如何去查询一个我没有在 Django 中使用模型创建的数据库/表。

我是否必须将表重新创建为模型才能使其与 Django 对话?如果是这样,那基本上意味着只需使用模型重新创建我的结构,然后将我的数据导入新表吗?

对不起,如果这是一个愚蠢的问题,我很感激你能提供任何帮助!

【问题讨论】:

您应该更具体地了解您想要做什么。也许您没有阅读 this 关于如何使用遗留数据库的内容?但是,如果您不告诉我们您的数据库中有什么以及您将如何使用它,就很难回答。 @dirkgroten 抱歉,缺少详细信息。截至目前,它只是一个测试数据库,其中包含一个由导入的 csv 制成的表。此时,我基本上只想 SELECT * FROM test_table 。这有帮助还是您需要更多信息?目标是能够查询数据库并根据用户名返回所有行。 下面的答案告诉您如何执行原始查询。但听起来你不是正确的轨道。为什么不根据 csv 中的内容创建模型,然后让 django 创建表,然后然后将 csv 导入 Django 管理的表中?这样您就可以获得 Django ORM 的所有好处,它返回一个正确的 python 对象而不是原始数据库行。 主要原因是csv只是一个测试环境,我应该指定..对不起。真正的 db 环境实际上是通过来自单独的 Postgres db 的数据迁移创建的。另一个团队正在处理这个问题,所以我只能在这个过程中做这么多。不过,您发送给我的旧链接可以正常工作!似乎它会做我现在需要的。 “来自单独的 postgres 数据库的数据迁移”。听起来您还将在生产中拥有一个新数据库(不一定直接使用旧数据库,除非作为数据源)。如果我是你,我仍然会让 Django 管理数据库并进行迁移,以便将遗留数据导入到新的托管数据库中。 【参考方案1】:

是的,你可以使用连接游标查询没有模型的数据库表

from django.db import connection

def my_custom_sql(self):
    cursor = connection.cursor()
    cursor.execute("SELECT * FROM table_name where id=1")
    row = cursor.fetchall()
    return row

【讨论】:

以上是关于你可以在没有模型的情况下在 Django 中运行原始 MySQL 查询吗?的主要内容,如果未能解决你的问题,请参考以下文章

在没有浏览器的情况下在 django 中触发密码重置电子邮件?

在没有模型的情况下在 MVC 中引发验证错误

我们如何在没有列表理解的情况下在 m2m 字段的 django 管理面板中显示用户

Laravel:在没有 Eloquent 的情况下在视图中显示数据

在没有在模型中定义的情况下在 rails 中创建 slug

如何在没有控制器调用的情况下在项目内的任何地方调用模型方法?