Django不使用settings.py

时间:2020-02-06 13:10:34

标签: python django django-admin

我花了几周时间学习Python / Django,并遇到了一个令人讨厌的问题。我已经在settings.py中建立了一些现有的数据库,一切看起来都很好,我什至已经使用connections []。cursor()

访问了数据库。

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

欢迎我提出其他建议和步骤!

1 个答案:

答案 0 :(得分:0)

(几乎)可以在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数据库中{3}}或manage.py loaddata,后者在json文件的结构上更灵活。

相关问题