Perhaps you don't want to drop a table, but you also want to do something faster than Model.objects.all().delete() but without resorting to raw SQL. This function, clear_tables, will call the sql_flush operation on a list of tables.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
def no_style(): """Returns a Django Style object that has no colors.""" class dummy(object): def __getattr__(self, attr): return lambda x: x return dummy() def clear_tables(*flush_tables): from django.db import connection, transaction cursor = connection.cursor() statements = connection.ops.sql_flush(no_style(), flush_tables, connection.introspection.sequence_list()) for statement in statements: cursor.execute(statement) transaction.commit_unless_managed()
More like this
- Image compression before saving the new model / work with JPG, PNG by Schleidens 5 days, 6 hours ago
- Help text hyperlinks by sa2812 1 month ago
- Stuff by NixonDash 3 months, 1 week ago
- Add custom fields to the built-in Group model by jmoppel 5 months, 1 week ago
- Month / Year SelectDateWidget based on django SelectDateWidget by pierreben 8 months, 3 weeks ago
I almost run the command above and reset ALL sequence of my tables, including the ones that I don't specify in the flush_tables, due to #13.
Here is my modified code for #13
reset_sequence = [ seq for seq in connection.introspection.sequence_list() if seq['table'] in flush_tables] statements = connection.ops.sql_flush(no_style(), flush_tables, connection.introspection.sequence_list())
Please login first before commenting.