Mirror and sync Django models in a json in another database.
Clone then:
pip install -r django-jsonmirror/requirements.txtAdd "jsonmirror", to installed apps.
Declare the databases:
SITE_SLUG = "my_site"
MIRROR_DATABASES = {
"main": {
"name": SITE_SLUG,
"type": "sqlite"
},
"alt": {
"name": SITE_SLUG,
"type": "rethinkdb"
}
}The SITE_SLUG setting is required
Declare the models you want to mirror in settings.py and set the database options for each model to mirror:
MIRRORED_MODELS = {
'django.contrib.auth.models.User': {
"alt": {
"table": "users",
"imutable": False
}
},
'myapp.models.MyModel': {
"main": {
"table": "mytable",
"imutable": False,
"soft_delete": False
},
"alt": {
"table": "pages"
}
}
}Note that table is required
Set to True by default: the database is write only
When imutability is turned of the soft delete option, enabled by default, will mark documents as deleted.
Set it to False to delete the documents in the database
Settings:
# required
MIRROR_DB = "mydb"
MIRROR_TABLE = "mymirrortable"
# optional:
RETHINKDB_HOST = "127.0.0.1" # default
RETHINKDB_USER = "admin" # default is None
RETHINKDB_PASSWORD = "mypassword" # default is NoneSettings:
# required
MIRROR_SQL_ENGINE = 'sqlite:///mirror.db'Refer to SqlAlchemy docs for how to setup db urls
Note: the sql backend is limited for now: it saves the data to an unique table named mirror with django model path and
the instance pk to use as compound index to retrieve the data.
The models declared for mirroring will be auto synchronized in the secondary databases at each save/delete operation performed on them
The command python manage.py sync_models will mirror all the models declared in the MIRRORED_MODELS setting.
They will be auto created/updated in the secondary databases using this command.
- SqlAlchemy backend
- Redis backend
- Support DRF serializers
- Support custom serializers
- Better handling of connection failure