Skip to main content

Prom

An opinionated asynchronous lightweight orm for PostgreSQL or SQLite.

1 Minute Getting Started with SQLite

First, install prom:

$ pip install prom[sqlite]

Set an environment variable:

$ export PROM_DSN=sqlite://:memory:

Start python:

$ python

Create a prom Orm:

>>> import prom
>>>
>>> class Foo(prom.Orm):
...     table_name = "foo_table_name"
...     bar = prom.Field(int)
...
>>>

Now go wild and create some Foo objects:

>>> for x in range(10):
...     f = await Foo.create(bar=x)
...
>>>

Now query them:

>>> f = await Foo.query.one()
>>> f.bar
0
>>> f.pk
1
>>>
>>> async for f in await Foo.query.in_bar([3, 4, 5]):
...     f.pk
...
3
4
5
>>>

Update them:

>>> async for f in await Foo.query:
...     f.bar += 100
...     await f.save()
...
>>>

and get rid of them:

>>> async for f in await Foo.query:
...     await f.delete()
...
>>>

Congratulations, you have now created, retrieved, updated, and deleted from your database.


Configuration

Prom can be automatically configured on import by setting the environment variable PROM_DSN.

The PROM_DSN should define a dsn url:

<full.python.path.InterfaceClass>://<username>:<password>@<host>:<port>/<database>?<options=val&query=string>#<name>

The built-in interface classes don't need their full python paths, you can just use sqlite and postgres.

So to use the builtin Postgres interface on testdb database on host localhost with username testuser and password testpw:

postgres://testuser:testpw@localhost/testdb

And to set it in your environment:

export PROM_DSN=postgres://testuser:testpw@localhost/testdb

After you've set the environment variable, then you just need to import Prom in your code:

import prom

and Prom will take care of parsing the dsn url(s) and creating the connection(s) automatically.

Multiple db interfaces or connections

If you have multiple connections, you can actually set multiple environment variables:

export PROM_DSN_1=postgres://testuser:testpw@localhost/testdb1#conn_1
export PROM_DSN_2=sqlite://testuser:testpw@localhost/testdb2#conn_2

It's easy to have one set of prom.Orm children use one connection and another set use a different connection, since the fragment part of a Prom dsn url sets the name:

import prom

class Orm1(prom.Orm):
    connection_name = "conn_1"
  
class Orm2(prom.Orm):
    connection_name = "conn_2"

Now, any child class that extends Orm1 will use conn_1 and any child class that extends Orm2 will use conn_2.

Creating Models

Checkout the README to see how to define the db schema and create models your python code can use.

Querying Rows

Checkout the README to see how to perform queries on the db.

Versions

While Prom will most likely work on other versions, Prom is tested to work on 3.10.

Installation

Postgres

If you want to use Prom with Postgres:

$ apt-get install libpq-dev python-dev
$ pip install prom[postgres]

Prom

Prom installs using pip:

$ pip install prom[sqlite]
$ pip install prom[postgres]

and to install the latest and greatest:

$ pip install --upgrade "git+https://github.com/Jaymon/prom#egg=prom"

Using for the first time

Prom takes the approach that you don't want to be hassled with table installation while developing, so when it tries to do something and sees that the table doesn't yet exist, it will use your defined fields for your prom.model.Orm child and create a table for you, that way you don't have to remember to run a script or craft some custom db query to add your tables. Prom takes care of that for you automatically.

Likewise, if you add a field (and the field is not required) then prom will go ahead and add that field to your table so you don't have to bother with crafting ALTER queries while developing.

If you want to install the tables manually, you can create a script or something and use the Orm's install() method:

await SomeOrm.install()

Metadata

Release files for prom 6.0.1

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

Source distribution (sdist)

Source distribution for prom 6.0.1
File Size Uploaded
prom-6.0.1.tar.gz 80.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for prom 6.0.1
File Interpreter ABI Platform
prom-6.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 161.0 kB

Release files / prom-6.0.1.tar.gz

Download URL prom-6.0.1.tar.gz
Size 80.8 kB
Tags Source
SHA-256 checksum
How to use checksums
bfc1343c393326e0c8e3a26c0c5375b2ee4ed46d2e02c71f15c69dd005bcdc47
BLAKE2b-256 checksum
How to use checksums
92fc400b3982a076633daba96ff499a3fa6266895b6dccf3bb2db2b6d3be44d7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.11

Release files / prom-6.0.1-py3-none-any.whl

Download URL prom-6.0.1-py3-none-any.whl
Size 80.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
30fa376462cb0e370626655c498695c4e0c94c6695074a5d36e57ccc3a985d61
BLAKE2b-256 checksum
How to use checksums
74e1c5305743db1878fd180938594a40e311abb414d5232040d10b5efd3f4f9d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.11

Release history Release notifications | RSS feed

This release

6.0.1 This release

2 release files

6.0.0

2 release files

5.4.1

2 release files

5.4.0

2 release files

5.3.0

2 release files

5.2.0

2 release files

5.1.0

2 release files

5.0.0

2 release files

4.7.0

1 release file

4.5.1

1 release file

4.5.0

1 release file

4.4.2

1 release file

4.4.1

1 release file

4.4.0

1 release file

4.3.3

1 release file

4.3.2

1 release file

4.3.1

1 release file

4.3.0

1 release file

4.2.4

1 release file

4.2.3

1 release file

4.2.2

1 release file

4.2.1

1 release file

4.2.0

1 release file

4.1.1

1 release file

4.1.0

1 release file

3.1.0

1 release file

2.4.0

1 release file

2.3.3

1 release file

2.3.2

1 release file

2.3.1

1 release file

2.3.0

1 release file

2.2.2

1 release file

2.2.1

1 release file

2.2.0

1 release file

2.1.3

1 release file

2.1.2

1 release file

2.1.0

1 release file

1.4.4

1 release file

1.4.3

1 release file

1.4.2

1 release file

1.4.1

1 release file

1.4.0

1 release file

1.3.0

1 release file

1.2.0

1 release file

1.1.1

1 release file

1.1.0

1 release file

1.0.1

1 release file

1.0.0

1 release file

0.10.9

1 release file

0.10.8

1 release file

0.10.7

1 release file

0.10.6

1 release file

0.10.5

1 release file

0.10.3

1 release file

0.10.2

1 release file

0.9.103

1 release file

0.9.102

1 release file

0.9.101

1 release file

0.9.100

1 release file

0.9.98

1 release file

0.9.97

1 release file

0.9.95

1 release file

0.9.93

1 release file

0.9.91

1 release file

0.9.90

1 release file

0.9.87

1 release file

0.9.86

1 release file

0.9.85

1 release file

0.9.84

1 release file

0.9.77

1 release file

0.9.67

1 release file

0.9.66

1 release file

0.9.64

1 release file

0.9.62

1 release file

0.9.61

1 release file

0.9.60

1 release file

0.9.57

1 release file

0.9.56

1 release file

0.9.55

1 release file

0.9.54

1 release file

0.9.53

1 release file

0.9.52

1 release file

0.9.51

1 release file

0.9.50

1 release file

0.9.32

1 release file

0.9.31

1 release file

0.9.30

1 release file

0.9.29

1 release file

0.9.27

1 release file

0.9.26

1 release file

0.9.25

1 release file

0.9.24

1 release file

0.9.23

1 release file

0.9.22

1 release file

0.9.19

1 release file

0.9.18

1 release file

0.9.10

1 release file

0.9.8

1 release file

0.9.5

1 release file

0.4.3

1 release file

0.4.1

1 release file

0.4

1 release file

0.3

1 release file

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