- FAQ: Databases and models
- How can I see the raw SQL queries Django is running?
- Can I use Django with a pre-existing database?
- If I make changes to a model, how do I update the database?
- Do Django models support multiple-column primary keys?
- Does Django support NoSQL databases?
- How do I add database-specific options to my CREATE TABLE statements, such as specifying MyISAM as the table type?
FAQ: Databases and models
How can I see the raw SQL queries Django is running?
Make sure your Django DEBUG
setting is set to True
.Then do this:
- >>> from django.db import connection
- >>> connection.queries
- [{'sql': 'SELECT polls_polls.id, polls_polls.question, polls_polls.pub_date FROM polls_polls',
- 'time': '0.002'}]
connection.queries
is only available if DEBUG
is True
.It’s a list of dictionaries in order of query execution. Each dictionary hasthe following:
- ``sql`` -- The raw SQL statement
- ``time`` -- How long the statement took to execute, in seconds.
connection.queries
includes all SQL statements – INSERTs, UPDATES,SELECTs, etc. Each time your app hits the database, the query will be recorded.
If you are using multiple databases, you can use thesame interface on each member of the connections
dictionary:
- >>> from django.db import connections
- >>> connections['my_db_alias'].queries
If you need to clear the query list manually at any point in your functions,call reset_queries()
, like this:
- from django.db import reset_queries
- reset_queries()
Can I use Django with a pre-existing database?
Yes. See Integrating with a legacy database.
If I make changes to a model, how do I update the database?
Take a look at Django’s support for schema migrations
.
If you don’t mind clearing data, your project’s manage.py
utility has aflush
option to reset the database to the state it was inimmediately after migrate
was executed.
Do Django models support multiple-column primary keys?
No. Only single-column primary keys are supported.
But this isn’t an issue in practice, because there’s nothing stopping you fromadding other constraints (using the unique_together
model option orcreating the constraint directly in your database), and enforcing theuniqueness at that level. Single-column primary keys are needed for things suchas the admin interface to work; e.g., you need a single value to specifyan object to edit or delete.
Does Django support NoSQL databases?
NoSQL databases are not officially supported by Django itself. There are,however, a number of side project and forks which allow NoSQL functionality inDjango, like Django non-rel.
You can also take a look on the wiki page which discusses some alternatives.
How do I add database-specific options to my CREATE TABLE statements, such as specifying MyISAM as the table type?
We try to avoid adding special cases in the Django code to accommodate all thedatabase-specific options such as table type, etc. If you’d like to use any ofthese options, create a migration with aRunSQL
operation that containsALTER TABLE
statements that do what you want to do.
For example, if you’re using MySQL and want your tables to use the MyISAM tabletype, use the following SQL:
- ALTER TABLE myapp_mytable ENGINE=MyISAM;