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
- FileField having auto upload_to path by junaidmgithub 2 days, 2 hours ago
- LazyPrimaryKeyRelatedField by LLyaudet 1 week, 2 days ago
- CacheInDictManager by LLyaudet 1 week, 2 days ago
- MYSQL Full Text Expression by Bidaya0 1 week, 3 days ago
- Custom model manager chaining (Python 3 re-write) by Spotted1270 2 weeks, 2 days ago
Comments
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.