You could run SQL queries in Django migrations by writing migrations or editing migration file yourself using RunSQL operations
class RunSQL(sql, reverse_sql=None, state_operations=None, hints=None,
elidable=False)
Allows running of arbitrary SQL on the database -
useful for more advanced features of database backends that Django
doesn’t support directly.
With state_operations argument
state_operations argument allows you to supply operations that are
equivalent to the SQL in terms of project state. For example, if you
are manually creating a column, you should pass in a list containing
an AddField operation here so that the autodetector still has an
up-to-date state of the model. If you don’t, when you next run
makemigrations, it won’t see any operation that adds that field and so
will try to run it again. For example:
migrations.RunSQL(
"ALTER TABLE musician ADD COLUMN name varchar(255) NOT NULL;",
state_operations=[
migrations.AddField(
'musician',
'name',
models.CharField(max_length=255),
),
],
)