Django - 为什么syncdb不尊重数据库路由器?
我设置了一个数据库路由器,使用 db_for_read 和 db_for_write 路由器方法将不同的应用程序和不同的模型定向到不同的数据库。
这工作得很好,除了 ./manage.pysyncdb
不尊重这些路由器设置。
当我syncdb
我的模型时,所有这些模型都是在默认数据库中创建的。
数据库路由器仅提供 allow_syncdb
方法,但没有 sync_to
方法。有没有办法告诉 syncdb
命令在哪里创建新表?
注意:我无法使用--database
功能,因为有时某些模型应用程序会使用与应用程序其余部分不同的数据库。
I have set up a database router to direct different apps and different models to different databases using the db_for_read
and db_for_write
router methods.
That works very well, except that ./manage.py syncdb
does't respect those router settings.
When I syncdb
my models, all of them are created in the default database.
The database router only provides an allow_syncdb
method, but no sync_to
method. Is there a way to tell the syncdb
command where to create the new tables?
Note: I can't use the --database
feature, as sometimes some of the model apps go to a different database than the rest of the app.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当你编写路由器时,请确保你已经编写了allow_syncdb()方法。它需要数据库和模型。当您运行
manage.pysyncdb
时,您实际上是在设置--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 且 model._meta.app_label==myapp 的情况下返回 True。这有道理吗?基本上,您必须运行
manage.pysyncdb
方法两次,每个数据库一次。您不能仅运行一次并让它更新两个数据库。When you write your router make sure you've written the allow_syncdb() method. It takes both a database and a model. When you run
manage.py syncdb
you're essentially setting the--database=default
. If you don't want your models to sync to the default database then your allow_syncdb() method should return False for the condition thatdb==default and model._meta.app_label==myapp
.You'll need to run syncdb with the
--database=your_other_db
option to getmyapp
into that db. But make sure in that case that allow_syncdb() returns True only for the case thatdb==your_other_db and model._meta.app_label==myapp
.Does that make sense? Basically you have to run the
manage.py syncdb
method twice, once for each database. You cannot run it only once and have it update both databases.