Пользовательский менеджер в 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/