Skip to main content

🐘 PostgresDB3 ORM

postgresdb3 - Python tilida yozilgan, PostgreSQL ma'lumotlar bazasi bilan ishlashga mo'ljallangan, o'ta tezkor va yengil ORM (Object-Relational Mapping) kutubxonasi. U sinxron (psycopg2 orqali) va asinxron (asyncpg orqali) ishlash rejimlarini to'liq qo'llab-quvvatlaydi hamda Django-ga o'xshash qulay sintaksis va mukammal migratsiya dvigatelini taqdim etadi.


📌 Mundarija

  1. O'rnatish (Installation)
  2. Ma'lumotlar Bazasiga Ulanish, Auto-Reconnect & Profiling
  3. Modellarni Yaratish (Models & Composite PK)
  4. Maydonlar (Fields) va Konstantalar
  5. Model Signallari (Signals Tizimi)
  6. Validatorlar (Validation)
  7. CRUD Operatsiyalari va FastAPI Pydantic Sxemalar
  8. QuerySet API (FTS, PostGIS, JSONB, only, defer, cache)
  9. Aloqalar bilan ishlash (Relationships)
  10. Migratsiya va Fixtures Tizimi (Data Migrations, Fixtures, CLI)
  11. Xatoliklar va Exceptionlar (Error Handling)

1. O'rnatish (Installation)

Loyihangizga kutubxonani o'rnatish uchun:

pip install postgresdb3

2. Ma'lumotlar Bazasiga Ulanish, Auto-Reconnect & Profiling

postgresdb3 ulanishlar pulida avtomatik tiklanish (Fault-tolerant Auto-Reconnect retry) hamda so'rovlar bajarilish vaqtini o'lchash mexanizmiga ega.

from postgresdb3 import PostgresDB
from postgresdb3.orm import Model

db_sync = PostgresDB(
    database="my_db",
    user="postgres",
    password="my_password",
    host="localhost",
    port=5432,
    echo=True,                   # Har bir so'rov vaqtini ko'rsatadi [SQL - 1.25ms]
    slow_query_threshold=200.0,  # 200ms dan oshsa [SLOW QUERY WARNING] chiqaradi
)

Model.db = db_sync

3. Modellarni Yaratish (Models & Composite PK)

from postgresdb3.orm import Model, fields

# 1. Birlamchi Kalitli Model
class Category(Model):
    name = fields.String(length=50, unique=True)

# 2. Murakkab (Composite) Birlamchi Kalitli Model
class OrderItem(Model):
    order_id = fields.Integer(primary_key=True)
    product_id = fields.Integer(primary_key=True)
    quantity = fields.Integer(default=1)

4. Maydonlar (Fields) va Konstantalar

  • Turlar: Integer, String, Text, Boolean, Date, Time, Timestamp, UUID, JSON, JSONB, Array, ForeignKey, OneToOne, ManyToMany
  • Konstantalar: fields.CASCADE, fields.SET_NULL, fields.RESTRICT, fields.SET_DEFAULT, fields.DO_NOTHING

5. Model Signallari (Signals Tizimi)

Django-ga o'xshash event-driven signallar tizimi: pre_save, post_save, pre_delete, post_delete.

from postgresdb3.orm import Model, fields, post_save, receiver

class User(Model):
    username = fields.String(length=50)

@receiver(post_save, sender=User)
def notify_user_created(sender, instance, created, **kwargs):
    if created:
        print(f"Yangi foydalanuvchi yaratildi: {instance.username}")

6. Validatorlar (Validation)

from postgresdb3.orm import Model, fields
from postgresdb3.orm.validators import MinValueValidator, EmailValidator

class User(Model):
    age = fields.Integer(validators=[MinValueValidator(18)])
    email = fields.String(length=100, validators=[EmailValidator()])

7. CRUD Operatsiyalari

user = User.create(username="ali", age=25)
user = User.first(username="ali")
user.age = 26
user.save()
user.delete()

7.1. FastAPI & Pydantic Sxemalari Generatori (to_pydantic)

ORM modellardan FastAPI request va response ob'ektlari uchun avtomatik pydantic.BaseModel yaratish:

class User(Model):
    id = fields.Serial(primary_key=True)
    username = fields.String(length=50)
    password = fields.String(length=128)
    email = fields.String(length=100)

# 1. To'liq Pydantic Sxema (Response Model uchun):
UserResponseSchema = User.to_pydantic(name="UserResponse")

# 2. Primary Key ("id") chiqarib tashlangan sxema (POST body so'rovlari uchun):
UserCreateSchema = User.to_pydantic(exclude=["id"])

# 3. Maxsus ustunlarni chiqarib tashlash (Masalan password va id):
UserPublicSchema = User.to_pydantic(exclude=["password", "id"])

# 4. Faqat belgilangan ustunlarni kiritish:
UserSimpleSchema = User.to_pydantic(include=["username", "email"])

8. QuerySet API (Qidiruv, JSONB, only, defer, cache)

A) Full-Text Search (FTS - To'liq Matnli Qidiruv):

PostgreSQL-ning to_tsvector va plainto_tsquery imkoniyati orqali matnlar ichidan lug'at boyligi bo'yicha tezkor qidiruv:

# 'content' matni ichidan "python ORM" so'z birikmalarini professional qidirish:
articles = Article.filter(content__search="python ORM").all()

B) PostGIS GeoSpatial (Geolokatsiya va Geometrik Qidiruv):

fields.Point maydoni va distance_lte / dwithin filtrlari orqali ma'lum koordinatadan belgilangan masofa (radius/metr) ichidagi obyektlarni qidirish:

class Store(Model):
    name = fields.String(length=100)
    location = fields.Point(srid=4326)

# Berilgan lat/lon (masalan Toshkent: 41.311, 69.240) dan 5000 metr (5km) radiusdagi do'konlar:
nearby_stores = Store.filter(location__distance_lte=(41.311, 69.240, 5000)).all()

C) JSONB Ustunlari Bo'yicha Chuqur Qidiruv:

# 1. Ichki JSON kalitlari bo'yicha filtrlash (metadata->'user'->>'role' = 'admin')
User.filter(metadata__user__role="admin").all()

# 2. JSON kaliti mavjudligini tekshirish (metadata ? 'discount')
Product.filter(metadata__has_key="discount").all()

# 3. JSON mosligini tekshirish (metadata @> '{"role": "admin"}'::jsonb)
User.filter(metadata__json_contains={"role": "admin"}).all()

D) QuerySet Caching (.cache(ttl=60)):

# PostgreSQL-ga takroriy so'rov yubormasdan so'rov natijasini 60 soniya xotirada keshlaydi:
categories = Category.filter(is_active=True).cache(ttl=60).all()

E) .only() va .defer() (RAM xotirani tejash):

# Faqat kerakli ustunlarni yuklash:
articles = Article.query().only("title", "views").all()

# Og'ir ustunlarni yuklashni kechiktirish:
articles = Article.query().defer("body", "payload").all()

9. Aloqalar bilan ishlash (Relationships)

class Post(Model):
    title = fields.String(length=100)
    author = fields.ForeignKey(User, related_name="posts", on_delete=fields.CASCADE)

user = User.first(id=1)
user_posts = user.posts.all()

10. Migratsiya va Fixtures Tizimi (Data Migrations, Fixtures, CLI)

Fixtures & Seed Data (CLI Buyruqlari):

# 1. Bazadagi ma'lumotlarni JSON faylga saqlash (Fixture export)
python manage.py dumpdata initial_data.json

# 2. JSON fixture faylidan ma'lumotlarni bazaga yuklash (Seed data import)
python manage.py loaddata initial_data.json

# 3. Migratsiya yaratish va qo'llash
python manage.py makemigrations
python manage.py migrate

11. Xatoliklar va Exceptionlar (Error Handling)

from postgresdb3.exceptions import (
    PostgresDBError,
    DatabaseError,
    IntegrityError,
    UniqueViolationError,
    ForeignKeyViolationError,
    DoesNotExist,
)

📄 Litsenziya

Ushbu loyiha MIT litsenziyasi ostida tarqatiladi.

Metadata

Release files for postgresdb3 3.0.4

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

Source distribution (sdist)

Source distribution for postgresdb3 3.0.4
File Size Uploaded
postgresdb3-3.0.4.tar.gz 54.0 kB Details

Built distribution (wheel)

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

Total release size: 104.0 kB

Release files / postgresdb3-3.0.4.tar.gz

Download URL postgresdb3-3.0.4.tar.gz
Size 54.0 kB
Tags Source
SHA-256 checksum
How to use checksums
f51e6c17791a545a0b2a4a6a93c2dccd3dde025bb1025de3693d1f8415de4209
BLAKE2b-256 checksum
How to use checksums
c0f31e9a4d1f7693ad66021502679be38a8e42e61ca5d766e3641d0596ccf3fa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release files / postgresdb3-3.0.4-py3-none-any.whl

Download URL postgresdb3-3.0.4-py3-none-any.whl
Size 50.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
70be170032a829ee301c150e8f97b4868d99e0605e60dcc862aa7c3e6d525499
BLAKE2b-256 checksum
How to use checksums
c75587df95917048f275bfa0c482bf788c05089938013573adbdc1670ed31423
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.14

Release history Release notifications | RSS feed

3.1.12

2 release files

3.1.11

2 release files

3.1.10

2 release files

3.1.9

2 release files

3.1.8

2 release files

3.1.7

2 release files

3.1.6

2 release files

3.1.5

2 release files

3.1.4

2 release files

3.1.3

2 release files

3.1.2

2 release files

3.1.1

2 release files

3.1.0

2 release files

3.0.7

2 release files

3.0.6

2 release files

3.0.5

2 release files

This release

3.0.4 This release

2 release files

3.0.3

2 release files

3.0.2

2 release files

3.0.1

2 release files

3.0.0

2 release files

2.3.0

2 release files

2.2.3

2 release files

2.2.2

2 release files

2.2.1

2 release files

2.2.0

2 release files

2.1.1

2 release files

2.1.0

2 release files

2.0.4

2 release files

2.0.3

2 release files

2.0.2

2 release files

2.0.1

2 release files

2.0.0

2 release files

1.1.0

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

1.0.0

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.0

2 release files

0.4.0

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

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