Django multidb:写入多个数据库
使用 Django multidb,编写 路由器< /a> 运行主/从基础设施。但是是否可以编写一个可以写入多个数据库的路由器?我的用例是项目的集合,所有项目都在同一域上运行。为了避免用户在每个站点上注册/登录,我想同步 contrib.auth
和 contrib.sessions
表。 Django multidb 是否可以实现这一点,或者我应该研究数据库系统(在我的例子中为 MySQL)的复制功能?
With Django multidb, it's fairly easy to write a router that runs a master/slave infrastructure. But is it possible to write a router that writes to multiple databases? My use case is a collection of projects, all running on the same domain. To save users from registering/login in on every site, I'd like to synchronize the contrib.auth
and contrib.sessions
tables. Is that possible with Django multidb or should I look into replication features of the database system (MySQL in my case)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我认为你会更好地实现 SSO 或 OAuth 服务
,但如果你想在两个数据库之间同步你的表用户,并且如果你使用你自己的 UserModel,你可以做这样的事情,
你也可以使用这样的装饰器,比如您还可以使用它来同步其他表:
希望这会有所帮助:)
i think you will be better implementing an SSO or OAuth service
but if you want like to synchronize your table users between two database and if you are using your own UserModel you can do something like this
you can also putting with a decorator like this, like this you can also use it for synchronizing other tables:
Hope this will help :)
我现在正在研究 Django 分片架构。
我查看了 Django 路由器,但决定推出自己的路由器。
关于您的问题的一些想法:
类似 -
保存 User 对象(至少在单数据库模型上)似乎通过 django.contrib 内部发生的各种魔法在幕后保存会话、身份验证等数据,因此您可能不必这样做并找出所有这些数据库表的名称和类型。
为了支持这项工作的可能性,我发誓我最近在某个地方读到(可能是在 Alex Gaynor 的一篇博客文章中),如果一个对象有外键,Django 将尝试使用该对象所在的同一个数据库(出于明显的原因,根据 Django 通常的操作方式)。
从您引用的 Django multiDB 页面上的示例中我想知道类似以下内容是否可行:
他们的示例代码:
可能的修改:
def allowed_syncdb(self, db, model):
再看一遍,这段代码可能作为“db_for_write”函数更有用。但你明白了。
毫无疑问,您必须添加其他类型的模型才能使这项工作正常进行(所有身份验证内容,内容广泛)。
祝你好运!希望这在某种程度上有帮助。
我对您的发现和评论感兴趣!
新山
I'm working on a Django sharding schema right now.
i looked at the Django router but decided to roll my own.
some thoughts on your issue:
something like--
saving User objects (at least on a single-DB model) seems to save session, auth, etc. data under the hood via the various magic occurring inside django.contrib, so there's a chance you might not have to go in and figure out the names and types of all these database tables.
in support of the possibility of this working, I swear I read somewhere recently (probably on one of Alex Gaynor's blog posts) that if an object has a foreign key Django will attempt to use the same DB the object lives on (for obvious reasons in light of the way Django typically operates).
from the example on the Django multiDB page you referenced I wonder if something like the following would work:
their sample code:
a possible modification:
def allow_syncdb(self, db, model):
looking at it again, this code would probably be more useful as the "db_for_write" function. but you get the idea.
there are no doubt other types of model you would have to add to make this work (all the auth stuff, which is extensive).
good luck! hope this is helpful in some way.
i'm interested in your findings and comments!
jb
首先,我认为您需要更多的 SSO 框架,例如 在这篇文章中
我尝试了mouad的答案,但我无法让类装饰器工作......在我看来,这个解决方案不允许在模型中自定义 save() 。
更适合我的需要,我定义了一个自定义泛型类并简单地覆盖 save() 函数。
进而:
First, I think what you need is more an SSO framework, like in this post
I tried mouad's answer, but I couldn't get class decorator working ... And it seems to me this solution does not allow to have custom save() in models.
More appropriate to my need, I've defined a custom generic class and simply override the save() function.
And then:
这是我的 multidb_model.py ,它似乎也可以处理外键。如果存在错误,将更新它,但是一旦您按照 Stepahne 的答案从此类继承,这将处理外键保存。
Here is my multidb_model.py which seems to handle foreign keys as well. Will update it if there are bugs but once you inherit from this class as per Stepahne's answer, this will handle foreign key saves.