首页 > 解决方案 > Django从多个数据库中读写

问题描述

大家好,我正在 django 中开发一个 Web 应用程序,并且正在使用 postgresql 数据库。我还必须能够从另一个使用 sqlserver 数据库的应用程序中获取一些数据。我试图获取的表有很多数据,所以使用直接链接可能是不明智的。关于这个问题,哪种方法最好?我可以使用 sql-odbc 连接来获取数据,还可以如何填充表假设我创建了一个本地表并将数据从 sql 迁移到 postgresql schedualy。想了解您是如何处理这个问题的以及您的经验。谢谢!

标签: pythonsql-serverdjangopostgresql

解决方案


在您的 settings.py 中编辑此代码(用于多个数据库)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'django',
        'USER': 'postgres',
        'PASSWORD': '12345678',
        'HOST': 'localhost',
        'PORT': '5432',
    },
    'connection_other_db': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mi_db',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

应用迁移命令:

对于默认数据库

$ ./manage.py migrate

对于其他数据库(connection_other_db)

$ ./manage.py migrate --database=connection_other_db

在您看来, 要使用 ORM,请使用以下命令:

Mi_Model.objects.using('connection_other_db').all() # For mysql database
Mi_Model.objects.all() # For default database (postgresql)

对于创建对象:

s = Mi_Model()
s._state.adding = False
s._state.db = 'connection_other_db'
s.field_1 = 'A value'
s.save()

或者

s = Mi_Model.objects.using('connection_other_db').create(
   field_1='A value'
   # ....
)

对于使用事务:

with transaction.atomic(using='connection_other_db'):
   # Your code here

用于使用游标

with connections['connection_other_db'].cursor() as cursor:
   cursor.execute('your query')

Django 文档: https ://docs.djangoproject.com/es/2.1/topics/db/multi-db/


推荐阅读