• Stars
    star
    184
  • Rank 209,187 (Top 5 %)
  • Language
    Python
  • License
    The Unlicense
  • Created over 12 years ago
  • Updated over 11 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

First-class Postgres feature support for the Django ORM.

django-postgres

Adds first-class support for PostgreSQL features to the Django ORM.

Planned features include:

Obviously this is quite a large project, but I think it would provide a huge amount of value to Django developers.

Why?

PostgreSQL is an excellent data store, with a host of useful and efficiently-implemented features. Unfortunately these features are not exposed through Django's ORM, primarily because the framework has to support several SQL backends and so can only provide a set of features common to all of them.

The features made available here replace some of the following practices:

  • Manual denormalization on save() (such that model saves may result in three or more separate queries).
  • Sequences represented by a one-to-many, with an order integer field.
  • Complex types represented by JSON in a text field.

Example

The following represents a whirlwind tour of potential features of the project:

from django.db import models
import django_postgres as pg


USStates = pg.Enum('states_of_the_usa', ['AL', ..., 'WY'])


class Address(pg.CompositeType):
    line1 = models.CharField(max_length=100)
    line2 = models.CharField(max_length=100, blank=True)
    city = models.CharField(max_length=100)
    zip_code = models.CharField(max_length=10)
    state = USStates()
    country = models.CharField(max_length=100)


class USPhoneNumber(pg.Domain):
    data_type = models.CharField(max_length=10)
    constraints = [
      r"VALUE ~ '^\d{3}-?\d{3}-?\d{4}$'"
    ]


class Customer(models.Model):
    name = models.CharField(max_length=100)
    shipping_address = Address()
    telephone_numbers = pg.Array(USPhoneNumber())
    is_preferred = models.BooleanField(default=False)


class PreferredCustomer(pg.View):
    projection = ['myapp.Customer.*']
    sql = """SELECT * FROM myapp_customer WHERE is_preferred = TRUE;"""

The SQL produced by this might look like:

CREATE TYPE states_of_the_usa AS ENUM ('AL', ..., 'WY');

CREATE TYPE myapp_address AS (
    line1 varchar(100),
    line2 varchar(100),
    city varchar(100),
    zip_code varchar(10),
    state states_of_the_usa,
    country varchar(100)
);

CREATE DOMAIN myapp_usphonenumber AS varchar(10)
    CHECK(VALUE ~ '^\d{3}-?\d{3}-?\d{4}$');

CREATE TABLE myapp_customer (
    id SERIAL PRIMARY KEY,
    shipping_address myapp_address,
    telephone_numbers myapp_usphonenumber[]
);

CREATE VIEW myapp_preferredcustomer AS
SELECT * FROM myapp_customer WHERE is_preferred = TRUE;

To create all your views, run python manage.py sync_pgviews

More Repositories

1

humanhash

Human-readable digests.
Python
852
star
2

markdoc

A lightweight Markdown-based wiki system. Current status: abandoned.
Python
347
star
3

jsonpipe

Convert JSON to a UNIX-friendly line-based format.
Python
302
star
4

zmqc

netcat for ØMQ. Small but powerful.
Python
256
star
5

urlobject

Python library for manipulating URLs (and some URIs) in a more natural way.
Python
188
star
6

dagny

Rails-style Resource-Oriented Architecture for Django.
Python
158
star
7

django-conch

Expose the Django shell as an SSH server.
Python
147
star
8

cssmin

*NO LONGER MAINTAINED*. A Python port of the YUI CSS compression algorithm.
Python
133
star
9

teena

Python ports of useful syscalls, using asynchronous I/O.
Python
110
star
10

zenqueue

An incredibly simple (but fast) network message queueing system, written in Python.
Python
66
star
11

django-castor

A content-addressable storage backend for Django.
Python
56
star
12

django-qmethod

Easily define methods over collections of Django models.
Python
54
star
13

django-boss

Simpler Django management commands, powered by argparse.
Python
54
star
14

gevent-psycopg2

Obsolete; use https://bitbucket.org/dvarrazzo/psycogreen/ instead.
Python
51
star
15

django-qmixin

A Django app for extending managers and the querysets they produce.
Python
42
star
16

django-exceptional

A Django client for Exceptional (getexceptional.com)
Python
42
star
17

rkquery

jQuery for Riak, in Python.
Python
31
star
18

uptheasset

[OBSOLETE] Double-entry bookkeeping and accounting, powered by RDF.rb and UNIX.
Ruby
30
star
19

slugify

A generic slugifier (currently only for Latin-based scripts).
Python
29
star
20

django-clsview

Yet another class-based view system for Django.
Python
25
star
21

websession

Information on WebSession, a proposed protocol for secure session maintenance on the Web
JavaScript
21
star
22

gevent-threading-comparison

An experiment to compare the performances of gevent and threading.
Python
17
star
23

calabash

Bash-style pipelining for Python generators.
Python
17
star
24

pdiffer

A Python interface to the PerceptualDiff tool.
Python
16
star
25

django-qmanager

Create managers for Django models based on pre-defined queries.
Python
15
star
26

daterange

Python utility like xrange(), but for datetime objects.
Python
13
star
27

python-csiphash

The SipHash-2-4 C reference implementation, CFFI-wrapped for Python
Python
12
star
28

amoebajs

A WebAssembly-based linear constraint solver for JavaScript
JavaScript
12
star
29

gevent-selfpipe

Hack to run blocking calls whilst maintaining gevent-based synchronization.
Python
12
star
30

urecord

A structured record metaclass for Python.
Python
12
star
31

django-zskel-project

Zack’s Skeleton Django Project.
Python
11
star
32

glyphicons-splitter

Produce individual SVGs and PDFs of the Glyphicons.
Python
10
star
33

django-retracer

Store and restore old locations in Django.
Python
10
star
34

zrpc

ZeroMQ-based JSON-RPC in Python.
Python
9
star
35

pathobject

An update of Jason Orendorff’s path.py.
Python
9
star
36

pyhoudini

Houdini bindings for Python (c.f. https://github.com/vmg/houdini)
9
star
37

relations

A tiny relational algebra engine for Python.
Python
7
star
38

django-cssmin

Easy CSS compression for Django.
Python
6
star
39

strscan

A simple string scanner class for Python. Useful for building lexers/tokenizers by hand.
Python
6
star
40

flask-resource

Build resource-oriented Web apps with Flask.
Python
6
star
41

blog.zacharyvoase.com

Zachary Voase’s nanoc3-powered blog.
Ruby
5
star
42

bossy

Write commands in Python, run them from the shell.
Python
4
star
43

python-crbtree

SortedDict and SortedSet implementations backed by a red-black tree, written in C.
C
4
star
44

python-recordinality

An implementation of the Recordinality sketch in Python, with a CLI
Python
4
star
45

exchequer

Easy table formatting in Python and on the command-line.
Python
4
star
46

django-jsmin

Easy JavaScript minification for Django.
JavaScript
4
star
47

djanjinja

Seamless Jinja2 integration with Django.
Python
3
star
48

broker

Python function dispatching based on MIME types and Accept headers.
Python
3
star
49

pistachio

An experimental Mustache implementation in Python.
Python
3
star
50

logbook-zmqpush

Python
2
star
51

croaring.py

Fast integer sets for Python, based on Roaring Bitmaps and CFFI
Python
2
star
52

llvmbc-wasm-loader

Webpack loader which converts LLVM bytecode to WASM using Emscripten
JavaScript
2
star
53

curly

Use the curl command line interface from Python with minimal fuss.
Python
2
star
54

swipecheck

SwipeCheck: Check into Foursquare using RFID/Twilio.
Python
2
star
55

metaspace

Create Python sub-modules using class syntax.
Python
2
star
56

python-cskipdict

A CFFI-based SkipDict implementation for Python.
C++
2
star
57

logbook-gevent

Experimental support for greenlet-based contexts in Logbook.
Python
2
star
58

skeleton.rb

A skeleton for Ruby projects (using Rake, RSpec, YARD and Bundler)
Ruby
2
star
59

compass-tfg-plugin

A Compass-compatible Sass port of the Tiny Fluid Grid system, plus extras.
Ruby
2
star
60

lovedb

The LoveDB spec.
1
star
61

word2vec

Automatically exported from code.google.com/p/word2vec
C
1
star
62

zacharyvoase.com

The nanoc-powered source of zacharyvoase.com.
PHP
1
star
63

assert_changes

Test assertions about changes in monitored values.
Python
1
star
64

hotqueue

HotQueue is a Python library that allows you to use Redis as a message queue within your Python programs.
Python
1
star
65

django-migrationbug-poc

A proof-of-concept for a bug in Django v1.8 migrations
Python
1
star
66

Adelie

The Ghost theme which powers my blog at zacharyvoase.com
CSS
1
star
67

jpipe

Manipulate JSON at the command-line easily with this line-based formatter
Go
1
star
68

try

A Try monad for Java 8
Java
1
star
69

tipsum

Lorem ipsum using the testing-in-python archive as the text corpus for a Markov chain
Python
1
star
70

stitch-test

Created with StackBlitz ⚡️
TypeScript
1
star
71

czmqc

zmqc, re-implemented in portable C.
C
1
star
72

logbook-zmqcentral

Centralized ZMQ_PUB/SUB-based logging for Logbook.
1
star
73

ninja-builder

JS/Typescript utility for building ninja build files programmatically.
TypeScript
1
star