diff options
| author | Tom Forbes <tom@tomforb.es> | 2018-09-18 21:14:44 +0100 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2018-09-18 16:14:44 -0400 |
| commit | 9cbdb44014c8027f1b4571bac701a247b0ce02a3 (patch) | |
| tree | b7cd20864b0d06f5e08b2c98a50cd5ef2a4cd9a0 /tests/postgres_tests/test_bulk_update.py | |
| parent | 7b159df94235036a41ee93952ff83bbc95c1da3c (diff) | |
Fixed #23646 -- Added QuerySet.bulk_update() to efficiently update many models.
Diffstat (limited to 'tests/postgres_tests/test_bulk_update.py')
| -rw-r--r-- | tests/postgres_tests/test_bulk_update.py | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/postgres_tests/test_bulk_update.py b/tests/postgres_tests/test_bulk_update.py new file mode 100644 index 0000000000..6dd7036a9b --- /dev/null +++ b/tests/postgres_tests/test_bulk_update.py @@ -0,0 +1,34 @@ +from datetime import date + +from . import PostgreSQLTestCase +from .models import ( + HStoreModel, IntegerArrayModel, JSONModel, NestedIntegerArrayModel, + NullableIntegerArrayModel, OtherTypesArrayModel, RangesModel, +) + +try: + from psycopg2.extras import NumericRange, DateRange +except ImportError: + pass # psycopg2 isn't installed. + + +class BulkSaveTests(PostgreSQLTestCase): + def test_bulk_update(self): + test_data = [ + (IntegerArrayModel, 'field', [], [1, 2, 3]), + (NullableIntegerArrayModel, 'field', [1, 2, 3], None), + (JSONModel, 'field', {'a': 'b'}, {'c': 'd'}), + (NestedIntegerArrayModel, 'field', [], [[1, 2, 3]]), + (HStoreModel, 'field', {}, {1: 2}), + (RangesModel, 'ints', None, NumericRange(lower=1, upper=10)), + (RangesModel, 'dates', None, DateRange(lower=date.today(), upper=date.today())), + (OtherTypesArrayModel, 'ips', [], ['1.2.3.4']), + (OtherTypesArrayModel, 'json', [], [{'a': 'b'}]) + ] + for Model, field, initial, new in test_data: + with self.subTest(model=Model, field=field): + instances = Model.objects.bulk_create(Model(**{field: initial}) for _ in range(20)) + for instance in instances: + setattr(instance, field, new) + Model.objects.bulk_update(instances, [field]) + self.assertSequenceEqual(Model.objects.filter(**{field: new}), instances) |
