Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用数据库路由器时在Django中打印SQL查询_Django_Django Models_Django Queryset - Fatal编程技术网

使用数据库路由器时在Django中打印SQL查询

使用数据库路由器时在Django中打印SQL查询,django,django-models,django-queryset,Django,Django Models,Django Queryset,我正在使用Django 1.8和Python 2.7。我想使用一个数据库,而不是“默认”数据库,我们可以使用所述的空白参数。让我们将该数据库称为“测试”。为了让django工作,我需要做一些路由。现在,我只是将所有内容路由到“测试”db,如下所示: class Router(object): def db_for_read(self, model, **hints): """ Reads go to a randomly-chosen replica.

我正在使用Django 1.8和Python 2.7。我想使用一个数据库,而不是“默认”数据库,我们可以使用所述的空白参数。让我们将该数据库称为“测试”。为了让django工作,我需要做一些路由。现在,我只是将所有内容路由到“测试”db,如下所示:

class Router(object):
    def db_for_read(self, model, **hints):
        """
        Reads go to a randomly-chosen replica.
        """
        return 'test'

    def db_for_write(self, model, **hints):
        """
        Writes always go to primary.
        """
        return 'test'

    def allow_relation(self, obj1, obj2, **hints):
        """
        Relations between objects are allowed if both objects are
        in the primary/replica pool.
        """
        return True

    def allow_migrate(self, db, app_label, model=None, **hints):
        """
        All non-auth models end up in this pool.
        """
        return True


# Database
# https://docs.djangoproject.com/en/1.8/ref/settings/#databases
DATABASE_ROUTERS = ['test123.settings.Router']
DATABASES = {
    'default': {},
    'test': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}
我制作了一个简单的模型(摘自Django教程):


我现在进行/运行适当的迁移。我可以在shell中进行查询,例如
Question.objects.all()
,它返回
[]
。但是,现在当我调用
print Question.objects.all().query
时,它会给出一个错误,说明
settings.DATABASES配置不正确。请提供引擎值。
我认为它使用的是“默认”数据库,而不是“测试”数据库。有没有办法解决这个问题以便我可以查看原始SQL查询?

尝试
Model.objects.using('test').all().query

您可以使用
手动选择数据库。看

更新

仅为
数据库['default']


默认值
数据库
引擎
为空时,Django会在每个api函数上引发一个
配置不当
异常。请参阅docstring。

allow\u migrate
中,不要返回
True
,我认为您应该使用
return db='test'
@RohitJain,在允许\u migrate的文档状态中执行以下操作:确定是否允许在别名为db的数据库上运行迁移操作。如果操作应该运行,则返回True;如果不应该运行,则返回False;如果路由器没有意见,则返回None。来源:是的,但是如果您总是返回
True
,它也会尝试在
default
db上进行迁移。我想这是错误的。嗯,我可能应该改变这一点,但我认为这与我的问题无关,因为我能够在正确的数据库上进行/应用迁移。我之所以知道这一点,是因为我能够进行一些基本的查询,例如
Question.objects.all()
当使用此命令时,我会遇到相同的错误,并且切换using语句的位置没有任何区别。如果您只提供“default”的引擎值,可能会发生这种情况吗?也将其设置为sqlite3。即使没有使用
命令的
,这似乎也能起作用。你知道你为什么需要它吗?文档似乎表明您不需要这样做。如果如您所说,为什么文档只给出一个空白参数的示例。
Django要求定义默认数据库条目,但如果不使用参数字典,则可以将其保留为空白来自
from django.db import models

# Create your models here.
class Question(models.Model):
    question_text = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')