2016-12-16 70 views
0

我想在网站的整个生命周期中运行一个命令。我不想多跑一次。数据库连接建立后如何运行SQL查询?

比方说,我想运行查询:

set names utf8mb4; 

然后我会运行是这样的:

SomeRandomObject.objects.raw('set names utf8mb4;') 

我应该在哪里放呢?这与我在查询上运行的对象有关系吗?有更好的对象吗?

+0

这可能是有用的:http://stackoverflow.com/questions/6791911/execute-code-when-django-starts-once-only –

回答

1

我通常会对connection这个对象本身做这件事。

from django.db import connections 
cursor = connections['DATABASE_NAME'].cursor() 
# replace DATABASE_NAME with the name of your 
# DATABASE connection, i.e., the appropriate key in the 
# settings.DATABASES dictionary 
cursor.execute("set names utf8mb4;") 

这样可以避免使用一些随机模型来运行原始查询。


n.b.如果你只有一个数据库连接,即default可以使用:

from django.db import connection 
cursor = connection.cursor() 
cursor.execute("set names utf8mb4;") 

在启动时运行一次,您可以添加以下到您的DATABASES

DATABASES = { 
    'default': { 
     ... 
     'OPTIONS': { 
      "init_command": "set names utf8mb4;" 
     } 
    } 
} 
+0

我只有1 settings.py中指定的数据库配置,所以我想这是一个连接?另外,你把这个文件放在哪个文件中? – User

+1

是的,那只是一个数据库。你可以把这个片段放在任何你想要的地方。你怎么称呼它取决于你。正如Paul Collingwood所建议的那样,如果你想在启动时运行它,只需将它放在任何视图之外的视图文件中即可。 – 2ps

相关问题