Ben*_*end 4 python django django-orm
使用Django multidb,编写运行主/从基础结构的路由器相当容易.但是有可能编写一个写入多个数据库的路由器吗?我的用例是一组项目,都在同一个域上运行.为了节省用户在每个站点上注册/登录,我想同步contrib.auth和contrib.sessions表.这是可能的Django multidb还是我应该研究数据库系统的复制功能(在我的情况下是MySQL)?
我认为您将更好地实施SSO或OAuth服务
但如果你想在两个数据库之间同步你的表用户,如果你使用自己的UserModel,你可以这样做
class MyUser(models.Model):
name = models.CharField(max_length=100)
user = models.ForeignKey(User, unique=True)
def save(self, ...): # ALL the signature
super(MyUser, self).save(using='database_1')
super(MyUser, self).save(using='database_2')
Run Code Online (Sandbox Code Playgroud)
您也可以使用这样的装饰器,这样您也可以使用它来同步其他表:
def save_multi_db(model_class):
def save_wrapper(save_func):
def new_save(self, *args, **kws):
super(model_class, self).save(using='database_1')
super(model_class, self).save(using='database_1')
return new_save
func = getattr(model_class, 'save')
setattr(model_class, 'save', save_wrapper(func))
return save_wrapper
# and use it like this:
@save_multi_db
class MyUser(models.Model):
....
Run Code Online (Sandbox Code Playgroud)
希望这会有所帮助:)
我现在正在研究 Django 分片架构。
我查看了 Django 路由器,但决定推出自己的路由器。
对你的问题的一些想法:
就像是 -
import settings.databases as dbs_list
def post_save_function(UserModel):
for db in dbs_list:
UserModel.save(using=db,force_insert=True)
Run Code Online (Sandbox Code Playgroud)
保存 User 对象(至少在单数据库模型上)似乎是通过 django.contrib 内部发生的各种魔法来保存会话、身份验证等数据,因此您可能不必深入了解所有这些数据库表的名称和类型。
为了支持这项工作的可能性,我发誓我最近在某个地方读到(可能是在 Alex Gaynor 的一篇博客文章中),如果一个对象有外键,Django 将尝试使用该对象所在的同一个数据库(出于明显的原因,根据 Django 通常的操作方式)。
从您引用的 Django multiDB 页面上的示例中,我想知道以下内容是否可行:
他们的示例代码:
def allow_syncdb(self, db, model):
"Explicitly put all models on all databases."
return True
Run Code Online (Sandbox Code Playgroud)
可能的修改:
defallow_syncdb(自身,数据库,模型):
if isinstance(model,User):
return True
elif isinstance(model,Session):
return True
else:
''' something appropriate --
whatever your sharding schema is for other objects '''
Run Code Online (Sandbox Code Playgroud)
再看一遍,这段代码可能作为“db_for_write”函数更有用。但你明白了。
毫无疑问,您必须添加其他类型的模型才能使这项工作正常进行(所有身份验证内容,内容广泛)。
祝你好运!希望这在某种程度上有帮助。
我对您的发现和评论感兴趣!
新山
| 归档时间: |
|
| 查看次数: |
3581 次 |
| 最近记录: |