我已经设置了一个数据库路由器,使用db_for_read
和db_for_write
路由器方法将不同的应用和不同的模型定向到不同的数据库。
除非./manage.py syncdb
不尊重这些路由器设置,否则效果非常好。
当我syncdb
我的模型时,所有模型都是在默认数据库中创建的。
数据库路由器仅提供allow_syncdb
方法,但不提供sync_to
方法。有没有办法告诉syncdb
命令在哪里创建新表?
注意:我无法使用--database
功能,因为有时某些模型应用会转到与应用程序其余部分不同的数据库。
答案 0 :(得分:9)
编写路由器时,请确保已编写allow_syncdb()方法。它需要数据库和模型。当您运行manage.py syncdb
时,您实际上是在设置--database=default
。如果您不希望模型同步到默认数据库,则对于db==default and model._meta.app_label==myapp
的条件,您的allow_syncdb()方法应返回False。
您需要使用--database=your_other_db
选项运行syncdb才能将myapp
放入该数据库。但请确保在这种情况下allow_syncdb()仅针对db==your_other_db and model._meta.app_label==myapp
的情况返回True。
这有意义吗?基本上你必须运行两次manage.py syncdb
方法,每个数据库一次。您不能只运行一次并让它更新两个数据库。