Пользовательский менеджер в Django MultiDB

Я использую MySQL и PostgreSQL в своем проекте Django. Ниже приведены настройки:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'mysql_db',
        'USER': 'username',
        'PASSWORD': 'password',
        'HOST': 'hostname',
        'PORT': '3306',
},
    'postgres_db': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'pgsql_db',
        'USER': 'username',
        'PASSWORD': 'password',
        'HOST': 'hostname',
        'PORT': '5432',
    }

}

А это образец модели

from postgres_copy import CopyManager
class Items(models.Model):
    class params:
        db = "postgres_db"
    sales_value             = models.CharField(max_length=255, null=True, blank=True)
    primary_email           = models.CharField(max_length=255, null=True, blank=True)
    
    objects = CopyManager()

Я хочу использовать Items.objects.all().to_csv('./path/to/csv) этот ORM для экспорта данных модели в CSV. Я уже использовал его раньше для экспорта большого набора данных в CSV. Но в этой конфигурации он выдает следующую ошибку

psycopg2.errors.SyntaxError: syntax error at or near "."
LINE 1: COPY (SELECT `sales_item`.`id`, `sales_item`.`sales_value`,...

Похоже, что это проблема с несколькими БД. Если я запускаю этот ORM в конфигурации с одной БД, или даже если я устанавливаю default псевдоним на PostgreSQL, это работает нормально.

CopyManager, похоже, каким-то образом получает псевдоним default, о котором я понятия не имею.

Как я могу запустить этот ORM в текущих настройках без каких-либо проблем? Любая помощь будет принята с благодарностью.

Заранее спасибо.

Мы используем postgres и MariaDB одновременно в одном проекте. Я могу сказать - вам не нужен дополнительный менеджер данных, в вашем случае это может быть:

from django.db.import models

class ItemsQuerySetManager(models.Manager):

    def get_queryset(self, *args, **kwargs):
        return super().get_queryset(*args, **kwargs).using("postgres_db")


class Items(models.Model):

    sales_value = models.CharField(max_length=255, null=True, blank=True)
    primary_email = models.CharField(max_length=255, null=True, blank=True)
    
    objects = ItemsQuerySetManager()

больше информации здесь: https://docs.djangoproject.com/en/4.1/topics/db/multi-db/

Вернуться на верх