我想在网站的整个生命周期中运行一个命令。我不想多跑一次。数据库连接建立后如何运行SQL查询?
比方说,我想运行查询:
set names utf8mb4;
然后我会运行是这样的:
SomeRandomObject.objects.raw('set names utf8mb4;')
我应该在哪里放呢?这与我在查询上运行的对象有关系吗?有更好的对象吗?
我想在网站的整个生命周期中运行一个命令。我不想多跑一次。数据库连接建立后如何运行SQL查询?
比方说,我想运行查询:
set names utf8mb4;
然后我会运行是这样的:
SomeRandomObject.objects.raw('set names utf8mb4;')
我应该在哪里放呢?这与我在查询上运行的对象有关系吗?有更好的对象吗?
我通常会对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;"
}
}
}
这可能是有用的:http://stackoverflow.com/questions/6791911/execute-code-when-django-starts-once-only –