【问题标题】:Django not using databases from settings.pyDjango 不使用来自 settings.py 的数据库
【发布时间】:2020-05-22 13:07:51
【问题描述】:

我已经使用 Python/Django 几个星期了,但遇到了一个烦人的问题。我在 settings.py 中设置了一些现有数据库,一切看起来都不错,我什至使用connections[].cursor() 访问了数据库

但数据库(和数据)并没有进入我想要使用的模型,尽管执行了 makemigrations 和 migrate 命令。我能够使用 py manage.py inspectdb --database-dbname 并将该类信息手动复制到我的 models.py 中,但这也不起作用(单独键入 py manage.py inspectdb 不会提取这些数据库,我只能通过那个 --database 扩展来查看)。所以我很难过,因为我似乎做了所有正确的步骤,但无法在 Django 中使用这些现有的数据库。

欢迎任何其他我可以采取的提示和步骤!

【问题讨论】:

  • 请分享 settings.py 文件
  • ` DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), }, 'strides': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'stravridedatabase.sqlite3'), }, 'ridedb':{ 'ENGINE' : 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'ridedb.sqlite3'), } }`
  • 在一个 django 项目中使用多个数据库不是你通常会做的事情。您想使用多个不同数据库的目的是什么?阅读this 以了解如何使用多个数据库及其含义。
  • 好吧,我已经从我用来从 Strava 提取自行车骑行数据的 python 文件中获得了数据库,所以我只是想将这些记录引入 Django。如果我能找到一种方法将数据从现有数据库传输到 Django 的默认数据库,我不反对只使用 Django,所以我很乐意就如何实际迁移所有数据提出任何建议

标签: python django django-admin


【解决方案1】:

(几乎)您可以在 Internet 上找到的所有教程、示例和第三方应用程序,并且大多数 Django 文档都假设您为您的应用程序使用一个数据库。这是因为在一个应用中使用多个数据库相当棘手且不寻常。

但使用多个数据库并非不可能,the documentation 包含有关如何执行此操作以及您需要进行哪些更改才能使其正常工作的说明。

IMO,这些是在一个项目中使用多个数据库的先决条件:

  • 数据库包含明确不相关的信息,即不同数据库中的表之间不会有 SQL 关系。一个数据库可能包含一个表,其中的一列映射到另一个数据库中表中的列,但它们不是显式的(模型中没有 ForeignKey 或 ManyToManyField)。
  • 您不需要在一个查询中混合数据库:这基本上源自前面的条件。这只是意味着如果您需要从一个数据库中获取依赖于来自另一个数据库的行的对象,您可以在 python 中建立关系。例如。从一个数据库中获取名称列表并使用该列表过滤另一个数据库上的查询集。

例如,如果您有一个现有的数据库,其中包含 Strava 路线(通过某种外部机制定期更新),并且您的应用是一个更广泛的应用,可以帮助用户了解他们的社区,在那里他们可以推荐位置和活动,能够提供附近起点的路线列表可能是您想要展示的内容。

现在您知道了,上面链接的文档中描述了要走的路:

  • Create a database router 以便对某些模型的查询自动路由到正确的数据库。例如。 Route.objects.filter(start_city=city) 会自动从您的 Strava 路线数据库中获取路线。
  • 如果您需要在应用程序中保存有关路线的信息,请将其保存在默认数据库中的模型中,并使用将映射到 strava 数据库的路线的唯一标识符。使用单独的查询(无关系)来获取有关特定路线的信息。

话虽如此,如果 Strava 数据库没有通过第三个渠道定期更新,并且其目的只是预填充您的默认数据库,则将 Strava 数据库中的数据导出为 json 并使用 @ 将其导入您的 django db 987654323@或a migration file,后者对json文件的结构更加灵活。

【讨论】:

  • 谢谢,我遇到了一些这样的问题,可能不得不继续走下兔子洞。或者,我正在探索的第三个选项可能是最好的选择,那就是弄清楚如何获取我的 python 文件(它基本上与 Strava 的 API 配合使用,以瓦特、心率、时间的形式下载我的骑行数据(以秒为单位)和乘车日期),只需将数据直接加载到 Django 数据库。我最初的测试让我将数据放入 pandas 数据框中,所以如果我可以更改我的代码以将数据框写入 Django 默认数据库,那将是理想的
  • 第三个选项听起来更简单、更合乎逻辑。
猜你喜欢
  • 2022-01-04
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
  • 2011-11-21
  • 2011-06-16
  • 2016-06-12
  • 2015-11-15
相关资源
最近更新 更多