How do I run SQL queries after a DB connection is established?

834 views Asked by At

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

There are 1 answers

2
2ps On BEST ANSWER

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