Skip to main content

Native Postgres update, upsert, and copy operations.

Project description

django-pgbulk

django-pgbulk provides functions for doing native Postgres bulk upserts (i.e. UPDATE ON CONFLICT), bulk updates, and COPY FROM.

Bulk upserts can distinguish between updated/created rows and ignore unchanged updates.

Bulk updates are true bulk updates, unlike Django's bulk_update which can still suffer from O(N) queries and can create poor locking scenarios.

Bulk copies can significantly speed-up bulk inserts, sometimes by an order of magnitude over Django's bulk_create.

Quick Start

Examples

Update or insert rows

import pgbulk

pgbulk.upsert(
    MyModel,
    [
        MyModel(int_field=1, some_attr="some_val1"),
        MyModel(int_field=2, some_attr="some_val2"),
    ],
    # These are the fields that identify the uniqueness constraint.
    ["int_field"],
    # These are the fields that will be updated if the row already
    # exists. If not provided, all fields will be updated
    ["some_attr"]
)

Bulk update rows

import pgbulk

pgbulk.update(
    MyModel,
    [
        MyModel(id=1, some_attr='some_val1'),
        MyModel(id=2, some_attr='some_val2')
    ],
    # These are the fields that will be updated. If not provided,
    # all fields will be updated
    ['some_attr']
)

Copy rows into a table

import pgbulk

pgbulk.copy(
    MyModel,
    # Insert these rows using COPY FROM
    [
        MyModel(id=1, some_attr='some_val1'),
        MyModel(id=2, some_attr='some_val2')
    ],
)

Advanced Features

Here are some advanced features at a glance:

  • pgbulk.upsert can categorize which rows were inserted or updated.
  • pgbulk.upsert and pgbulk.update can ignore updating unchanged fields.
  • pgbulk.upsert and pgbulk.update can use expressions in updates.

Documentation

View the django-pgbulk docs here for more examples.

Compatibility

django-pgbulk is compatible with Python 3.9 - 3.13, Django 4.2 - 5.1, Psycopg 2 - 3, and Postgres 13 - 17.

Installation

Install django-pgbulk with:

pip3 install django-pgbulk

Contributing Guide

For information on setting up django-pgbulk for development and contributing changes, view CONTRIBUTING.md.

Creators

Other Contributors

  • @max-muoto
  • @dalberto

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_pgbulk-3.2.2.tar.gz (11.9 kB view details)

Uploaded Source

Built Distribution

django_pgbulk-3.2.2-py3-none-any.whl (11.3 kB view details)

Uploaded Python 3

File details

Details for the file django_pgbulk-3.2.2.tar.gz.

File metadata

  • Download URL: django_pgbulk-3.2.2.tar.gz
  • Upload date:
  • Size: 11.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.12.7 Linux/6.8.0-1020-aws

File hashes

Hashes for django_pgbulk-3.2.2.tar.gz
Algorithm Hash digest
SHA256 bdc97cedba1a02734c9609cdf80296a1022ce9a6a497d4e8f3b25170768d945e
MD5 a18bb83feeb7321482ecb0f0d12c6124
BLAKE2b-256 cfed085e8a7c1bc5713219471cc0b8a06dddff5558c584c67962b3f80b310865

See more details on using hashes here.

File details

Details for the file django_pgbulk-3.2.2-py3-none-any.whl.

File metadata

  • Download URL: django_pgbulk-3.2.2-py3-none-any.whl
  • Upload date:
  • Size: 11.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.12.7 Linux/6.8.0-1020-aws

File hashes

Hashes for django_pgbulk-3.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 73a66f4436da70af98daa3ee2de4ebb9acfa050c392681ed053055180784d595
MD5 255c7c8f187ebe3bd65f4662d7231633
BLAKE2b-256 f357ec9bd9faa121fbfcd8bbbed3b6a4e9e14725ba6e11c3c7eca27a85b37792

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page