Django - 为什么syncdb不尊重数据库路由器?

发布于 2024-12-03 15:07:25 字数 402 浏览 3 评论 0原文

我设置了一个数据库路由器,使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

柠栀 2024-12-10 15:07:25

当你编写路由器时,请确保你已经编写了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 that db==default and model._meta.app_label==myapp.

You'll need to run syncdb with the --database=your_other_db option to get myapp into that db. But make sure in that case that allow_syncdb() returns True only for the case that db==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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文