【问题标题】:Django - Why doesn't syncdb respect the database router?Django - 为什么 syncdb 不尊重数据库路由器?
【发布时间】:2011-11-13 17:12:35
【问题描述】:

我设置了一个数据库路由器,使用db_for_readdb_for_write 路由器方法将不同的应用程序和不同的模型定向到不同的数据库。

效果很好,只是 ./manage.py syncdb 不尊重这些路由器设置。

当我syncdb我的模型时,它们都是在默认数据库中创建的。

数据库路由器只提供allow_syncdb方法,没有sync_to方法。有没有办法告诉syncdb 命令在哪里创建新表?

注意:我不能使用--database 功能,因为有时某些模型应用程序与应用程序的其余部分会转到不同的数据库。

【问题讨论】:

    标签: django django-models django-syncdb


    【解决方案1】:

    当您编写路由器时,请确保您已经编写了 allow_syncdb() 方法。它需要一个数据库和一个模型。当您运行manage.py syncdb 时,您实际上是在设置--database=default。如果您不希望您的模型同步到默认数据库,那么您的 allow_syncdb() 方法应该在 db==default and model._meta.app_label==myapp 的条件下返回 False。

    您需要使用 --database=your_other_db 选项运行 syncdb 以将 myapp 导入该数据库。但请确保在这种情况下 allow_syncdb() 仅在 db==your_other_db and model._meta.app_label==myapp 的情况下返回 True。

    这有意义吗?基本上你必须运行manage.py syncdb 方法两次,每个数据库一次。您不能只运行一次并让它更新两个数据库。

    【讨论】:

      猜你喜欢
      • 2012-03-28
      • 2021-11-17
      • 2017-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      相关资源
      最近更新 更多