Djongo RunPython при миграции базы данных
Есть приложение django с djongo в качестве драйвера базы данных. Я хочу добавить пользовательскую миграцию, используя RunPython
. Но я не могу понять, как связаться с клиентом pymongo. Вот код:
from django.db import migrations
def _custom_migration(apps, schema_editor):
db = ... # what to put here?
db.collection1.update_many({}, [{'$set': {"field2": "$field1.id"}}])
class Migration(migrations.Migration):
operations = [
migrations.RunPython(_custom_migration),
]
из документации https://pymongo.readthedocs.io/en/stable/tutorial.html попробуйте следующее:
from pymongo import MongoClient
def _custom_migration(apps, schema_editor):
client = MongoClient('localhost', 27017)
db = client.test_database
db.collection1.update_many({}, [{'$set': {"field2": "$field1.id"}}])
Вы можете связаться с PyMongo:
- client (
MongoClient
экземпляр) fromschema_editor.connection.client_connection
. - db (
Database
экземпляр) fromschema_editor.connection.connection
.
def _custom_migration(apps, schema_editor):
db = schema_editor.connection.connection
db.collection1.update_many({}, [{'$set': {"field2": "$field1.id"}}])
Ссылки на источники:
schema_editor.connection
держит экземплярDatabaseWrapper
.DatabaseWrapper.client_connection
держит экземплярMongoClient
.(Base)DatabaseWrapper.connection
держит экземплярDatabase
.
Чтобы получить клиент PyMongo в приложении Django с Djongo в качестве драйвера базы данных, вы можете использовать пакет djongo для подключения к базе данных:
from django.db import migrations from djongo import DjangoClient
def _custom_migration(apps, schema_editor):
client = DjangoClient()
db = client['database_name']
db.collection1.update_many({}, [{'$set': {"field2": "$field1.id"}}])
class Migration(migrations.Migration):
operations = [
migrations.RunPython(_custom_migration),
]
Здесь client - это клиент PyMongo, а db - экземпляр базы данных PyMongo. Имя базы данных указывается в части ['database_name'].