Skip to main content

FastORM

ORM for async postgres

Beta

FastORM is a modern, fast (async), database library for projects with Python 3.10+ based on standard Python type hints.

The key features are:

  • Async postgres
  • Tested to work with Python 3.10

Install

pip install fastorm

Example

See example.py for more examples.

Let's define some tables, to show off the capabilities.

class State(str, Enum):
    RUNNING = 'running'
    ABORTED = 'stopped'
    COMPLETED = 'done'
# end class


class User(FastORM):
    _ignored_fields = []
    _primary_keys = ['id']
    _automatic_fields = ['id']
    _table_name = 'user'

    id: Optional[int]  # Optional because automatically filled (_automatic_fields)
    name: str


class Auction(FastORM):
    _ignored_fields = []
    _primary_keys = ['id']
    _automatic_fields = ['id']
    _table_name = 'auction'

    id: Optional[int]  # Optional because automatically filled (_automatic_fields)
    owner: Union[int, User]  # can be provided by int or the native object
    previous_owner: Optional[User]  # Optional because nullable
    state: State  # Enum support :D
    title: str
    subtitle: Optional[str]  # nullable
    description: str
    start_date: datetime  # datetime support
    end_date: datetime
    metadata: JSONType
    deleted: bool
    chat_id: int

Now you can quickly write classes to the database:

conn = await FastORM.create_connection('postgresql://user:password@postgres_host/database')


user = User(id=None, name="hunter24")  # id will be filled by the database
await owner_user.insert(conn=conn)  # set's the id, too.

auction = Auction(
    id=None,  # gonna be automatic if `insert(…, ignore_setting_automatic_fields=False)` (default).
    # two ways of setting references to other tables:
    # by the actual value, in this case the numeric id
    owner=user.id,  
    # or via a different object,
    # it will use the id field (internally set by `User._primary_keys`) to determine the actual values.
    previous_owner=user,  
    state=State.RUNNING,  # enum will be a string in the database
    title="I sell my soul", subtitle="Slightly used",
    description="You only get a share though, others claim ownership, too.",
    start_date=datetime.now(), end_date=datetime.now() + timedelta(days=5),  # datetimes just works
    metadata={"just": ["json", "stuff", 111, datetime.now()]},  # will be native JSONB. You can have datetimes and your own classes in there as well, see `FastORM._set_up_connection`.
    deleted=False,
    chat_id=9223372036854775807,  # note, this database field must be BIGINT for such large numbers
)
await auction.insert(conn=conn)

Basic lookups are easy, too.

# single lookup, returns one element or None
user = await User.get(name="hunter24")
user = await User.get(id=1234)

# list of results (list can have length 0)
all_running_auctions = Auction.select(state=State.RUNNING)

Of course updating and deleting is possible too.

auction.state = State.COMPLETED
await auction.update()
await user.delete()

Download files

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

Source Distribution

fastorm-0.0.17.tar.gz (74.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

fastorm-0.0.17-py3-none-any.whl (46.0 kB view details)

Uploaded Python 3

File details

Details for the file fastorm-0.0.17.tar.gz.

File metadata

  • Download URL: fastorm-0.0.17.tar.gz
  • Upload date:
  • Size: 74.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.32.3

File hashes

Hashes for fastorm-0.0.17.tar.gz
Algorithm Hash digest
SHA256 cc4f7326e4837472f245668b04f7c81e191a22187a68caca06266cfc1ffc5c31
MD5 e108031c711f70f2ae736bfb32a552ed
BLAKE2b-256 eb9fe19e3377060bfc5a61ed324a64201d4baa9dbba17e5e1333a3f1703ea698

See more details on using hashes here.

File details

Details for the file fastorm-0.0.17-py3-none-any.whl.

File metadata

  • Download URL: fastorm-0.0.17-py3-none-any.whl
  • Upload date:
  • Size: 46.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.32.3

File hashes

Hashes for fastorm-0.0.17-py3-none-any.whl
Algorithm Hash digest
SHA256 9699c8c79fdd8b3aa4f2f23cbc3eb2ca727cec534e029489031ab598f7105019
MD5 5de27a906cc20eacc363d36ca447fd77
BLAKE2b-256 7016ab268ea371f30fdbf6b15eba363e1595e7a70af56fe7d4709d7288ad5e70

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.0.17 This release

2 files

0.0.16

2 files

0.0.15

2 files

0.0.14

2 files

0.0.13

2 files

0.0.12

2 files

0.0.11

2 files

0.0.10

2 files

0.0.9

2 files

0.0.8

2 files

0.0.7

2 files

0.0.6

2 files

0.0.5

2 files

0.0.4

2 files

0.0.3

2 files

0.0.2

2 files

Supported by

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