【问题标题】:Django - Access pre-existing data in mySQL databaseDjango - 访问 mySQL 数据库中预先存在的数据
【发布时间】:2018-11-25 09:00:24
【问题描述】:

我想要做的是:我有一个包含一些公共交通数据的 csv 文件。我想在我的 Django 应用程序中使用它,所以我将 csv 导入我的 mySQL 数据库。然后,我为表创建了一个 Django 模型(我还将我的模型与python manage.py inspectdb 的输出进行了比较,以确保它是正确的。然后我运行python manage.py makemigrations,最后运行python manage.py migrate。据我所知(我是Django 新手,如果我遗漏了一些明显的东西,很抱歉),我的数据库中的表现在应该可以被 Django 访问了。

但它不起作用。我尝试使用 Django shell (python manage.py shell) 并使用 Stops.objects.all() 返回表内容,它返回一个空集。同样,我能够创建一个值为 Stops.objects.all() 的 HttpResponse,虽然它没有给出错误,但没有返回任何数据。我已经确认我在 settings.py 中访问了正确的数据库,并且数据实际上是通过 mysql 终端存在的。

我多年来一直在尝试解决此问题,但没有找到任何解决方案。我想我可能错过了一些小步骤,希望这里的人会知道。提前致谢!

【问题讨论】:

  • 您是否在 Django 设置中连接到您的 mySQL 服务器?默认情况下它使用 SQLight。
  • 是的,我正在使用 mysql 连接器并安装了 mysqlclient Python 包。当我练习时,我能够创建表格、插入数据并返回它。该问题似乎特定于不是通过 Django 创建的数据。
  • 你确定你导入csv文件的表名和makemigrations-migrate创建的表名一样吗?
  • 正如@Chiefir 所说,Django 有一种特定的方式来命名它创建的表,它是[app_name]_[table_name],可能是您将数据导入到一个名为mydata 的表中,但 Django 期望要命名的表myapp_mydata?
  • 其实我不确定。我数据库中的表称为“stops”,我的 Django 模型称为“Stop”。我应该在其他地方定义模型应该代表的数据库表吗?还是该类必须与表具有完全相同的名称?这是我在尝试解决此问题时考虑的问题,但如果模型以某种方式未与正确的表关联,当我运行 makemigrations-migrate 时不会创建一个新表吗?当我这样做时,它工作正常,我的数据库中仍然只有“停止”表。

标签: mysql django python-3.x django-models


【解决方案1】:

如果我是你,我会验证我的表是否按预期命名。

使用 MySQL,something like

USE mydb
SHOW TABLES;

我假设您的 django 表将使用 f"{app_label}_{model}" 的默认命名方案,因此如果您的应用名为“my_app”并且您的模型为“stops”,那么您可以期望 django 正在管理一个名为“my_app_stops”的表

您可以使用 django shell 验证这一点

$ ./manage.py 外壳

from my_app.models import Stops
Stops._meta.db_table

我希望这会有所帮助。没有更多信息,我只能告诉你如何调查最明显的缺陷。

编辑 如果您确实确定这是差异,您有几个选择: (1) 重命名您的表以匹配 Django,或者 (2) 强制django使用a Meta class查看你现有的表

from django.db import models
class Stops(models.Model):
    class Meta:
        db_table = 'some_table_name'

【讨论】:

  • 就是这样,非常感谢!!当我运行Stops._meta.db_table 时,我可以看到它正在寻找一个名为 [my_app]_stop 的表,这当然不是我尝试使用的表的名称。我刚刚在 mySQL 和 BAM 中重命名了表,我所有可爱的巴士站都在那里!再次感谢,我已经在这几个小时了,老实说,我不认为我会自己得到它,所以非常感谢!
猜你喜欢
  • 2021-12-24
  • 2015-05-31
  • 1970-01-01
  • 2014-10-13
  • 2016-11-18
  • 1970-01-01
  • 2014-04-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多