0

I want to run a command for the duration of the lifetime of the website. I don't want to run it more than once.

Let's say I want to run the query:

set names utf8mb4;

Then I would just run something like:

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

Where should I put this? Does it matter what object I run the query on? Is there a better object?

1

1 Answer 1

1

I usually do this off the connection object itself.

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;")

This way you can avoid having to use some random model to run your raw queries.


n.b. if you only have one database connection, i.e., default you can use:

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

To run this once at startup, you can add the following to your DATABASES

DATABASES = {
    'default': {
        ...
        'OPTIONS': {
            "init_command": "set names utf8mb4;"
        }
    }
}
Sign up to request clarification or add additional context in comments.

2 Comments

I only have 1 database configuration specified in settings.py, so I suppose it's one connection? Also, what file did you put this in?
Yes, that is just one database. You can place this snippet wherever you want. It’s up to you how you call it. As suggested by Paul Collingwood, if you want this to run at startup, just put it in your views file outside of any views.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.