FastORM framework, easy to learn, fast to code
Project description
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
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()
Project details
Release history Release notifications | RSS feed
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.12.tar.gz
(65.3 kB
view details)
Built Distribution
fastorm-0.0.12-py3-none-any.whl
(40.7 kB
view details)
File details
Details for the file fastorm-0.0.12.tar.gz
.
File metadata
- Download URL: fastorm-0.0.12.tar.gz
- Upload date:
- Size: 65.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.26.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 67c3e99bb3d9caef83c6a98fa7e885b9e35de1fb82ff154ca65c7c225ec0b619 |
|
MD5 | 7e1447e3d0fd936c34fe95124d85cb65 |
|
BLAKE2b-256 | 5e4ec34fcebcb998947beb4f56c2c5729061517adefc46d1817a6c960f2687ff |
File details
Details for the file fastorm-0.0.12-py3-none-any.whl
.
File metadata
- Download URL: fastorm-0.0.12-py3-none-any.whl
- Upload date:
- Size: 40.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.26.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 097461e5b75d903e90938c3e4823285006d3166fcfd5147bc10cd7443c4141af |
|
MD5 | 2bfe37951f77e0294d7f38ddadb761be |
|
BLAKE2b-256 | 35f57b4d8ad47459810b1bae6cf7624f0b11980cfd2a240a3fd2e51bca4ac946 |