首页 > 解决方案 > django orm 从其他数据库获取子数据

问题描述

使用 django 2.0.2 python3.4 drf

详情跳过

设置.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'main',
        'USER': 'root',
        'PASSWORD': 'root123',
        'HOST': 'localhost',
        'PORT': "3309",
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
            'charset': 'utf8mb4',
            'use_unicode': True,
        }
    },
    'log': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'log',
        'USER': 'root',
        'PASSWORD': 'root123',
        'HOST': 'localhost',
        'PORT': "3309"
    }

}

模型.py

#used database main
class Post(models.Model):
    PostUID = models.BigAutoField(
    db_column='PostUID', primary_key=True)

日志模型.py

#used database log
class PostLog(models.Model):
    LogUID = models.BigAutoField(
    db_column='LogUID', primary_key=True)
    #top directory is main
    PostUID = models.ForeignKey(
    "main.Post", db_column='PostUID', on_delete=models.CASCADE) 
    UserUID = models.ForeignKey ... skip

我试过这段代码

Post.objects.all().annotate(Log=Case(When(postlog__UserUID=request.get("UserUID"),then=1), output_field=IntegerField(), default=Value(0)))

引发异常

django.db.utils.ProgrammingError: (1146, "Table 'main.Postlog' doe
sn't exist")

如果创建或获取我使用objects.using("log")

工作过

orm中的使用方法

标签: pythondjangodjango-modelsdjango-database

解决方案


推荐阅读