Make django query pasteable

When troubleshooting, I often make:

print(qs.query)

Then I usually copy and paste the query into a DB client like dbeaver or similar to improve the query, but i need to make adjustment like literal dates:

2024-02-01 → ‘2024-02-01’

would be great to make queryset.query directly pasteable. If not possible, maybe a method like format(queryset.query)

From my understanding, that’s not actually practical for a QuerySet.

The query property of a queryset is a “database-independent” representation of a query to be issued to a database.

The issue is that that class doesn’t know what database backend is going to be used to execute the query, so if there is some database-specific syntax to be applied, the queryset object itself needs to be able to support that.

This means that an attempt to provide a “pasteable” query representation would need to be a function of the database engine and not the QuerySet class.

If you set DEBUG=True, you have the most recent queries stored in the django.db.connection.queries list. You can also configure the logger to log all queries issued. You might also be able to find a way to use the engine classes directly to generate an actual SQL statement for a QuerySet. But at that point, you’re digging into non-public APIs, which means they aren’t guaranteed to stay the same across releases.

1 Like

fair enough. thanks for your reply.