Skip to main content

pg_serializer: Very fast JSON serializer using Django and PostgreSQL

PyPI version Python Version Code style: black pipeline status coverage report

Overview

Django REST framework is a powerful and flexible toolkit for building Web APIs.

Django Rest Framework is a great framework for building REST APIs on top of Django and it fits 99% of use cases.
However, JSON serialization is done in Python and it can be very slow for some list endpoints that return a lot of records.

pg_serializer aims to soften this 1% issue by providing a way to do JSON serialization inside your PostgreSQL database. Indeed, PostgreSQL has a built-in support for JSON since version 9.2, and it is far more faster than Python's one.

Installation

pip install pg-serializer

Basic usage

pg_serializer features an automatic ModelSerializer like DRF.

from django.contrib.auth.models import User

import pg_serializer


class UserSerializer(pg_serializer.ModelSerializer):
    class Meta:
        model = User
        fields = (
            "id",
            "username",
            "email",
            "first_name",
            "last_name",
            "is_staff",
            "date_joined",
        )


json_str = UserSerializer(User.objects.all()).json

It also has preliminary support for ForeignKey relation using the Django __ separator.

import pg_serializer


class OrderSerializer(pg_serializer.ModelSerializer):
    buyer = pg_serializer.StringField(source="buyer__username")

    class Meta:
        model = Order
        fields = (
            "transaction_id",
            "transaction_time",
            "buyer",
            "is_gift",
            "shipping_date",
            "additional_data",
        )


json_str = OrderSerializer(Order.objects.all()).json

Full examples are available inside tests/models.py and tests/serializers.py.

Disclaimer ⚠️

  • pg_serializer is not designed to replace DRF serializers, only to speed up some endpoints when performance is becoming an issue
  • pg_serializer is still in alpha development: bugs can occur and it doesn't support all Django fields and relations

Roadmap

  • reinforce the test suite
  • implement (and document) custom datetime and decimal formatting
  • document how to create custom serializer fields
  • full support for ArrayField and JSONField
  • complex queryset operations (GROUP BY, ...) support

Release files for pg-serializer 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pg-serializer 0.1.3
File Size Uploaded
pg_serializer-0.1.3.tar.gz 7.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pg-serializer 0.1.3
File Interpreter ABI Platform
pg_serializer-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 16.0 kB

Release files / pg_serializer-0.1.3.tar.gz

Download URL pg_serializer-0.1.3.tar.gz
Size 7.6 kB
Tags Source
SHA-256 checksum
How to use checksums
6c8e7ce593755ac73e221d2b3cee9982beefed06fc7416761eb85e9e094a540c
BLAKE2b-256 checksum
How to use checksums
6674eb0ba0266c07681f9a1058090995e4455800cf6b30ba0d22d64975346117
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.3 CPython/3.9.0 Darwin/19.6.0

Release files / pg_serializer-0.1.3-py3-none-any.whl

Download URL pg_serializer-0.1.3-py3-none-any.whl
Size 8.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c8d255956918fb763a50d50863af2a06129109a56a29c86854d1c1a07b987754
BLAKE2b-256 checksum
How to use checksums
bac8f7bd786c6682fa510cd27faafb1e71b7a6ecb4f0513605f2380f21c9e8cd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.3 CPython/3.9.0 Darwin/19.6.0

Release history Release notifications | RSS feed

This release

0.1.3 This release

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page