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"])

# 5. Belgilangan maydonlarni ixtiyoriy (Optional/None) qilish:
UserUpdateSchema = User.to_pydantic(exclude=["id"], optional=["email", "username"])

# 6. PATCH so'rovi uchun barcha maydonlarni ixtiyoriy qilish (optional=True):
UserPatchSchema = User.to_pydantic(name="UserPatch", exclude=["id"], optional=True)

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 & String References)

postgresdb3 ORM munosabatlar (ForeignKey, OneToOne, ManyToMany) uchun string shaklida model nomini berishni (to="ModelName") to'liq qo'llab-quvvatlaydi. Bu orqali alohida fayllarda joylashgan modellar o'rtasidagi Circular Import muammolarining oldi olinadi.

Jadvallar nomlanishi avtomatik tarzda CamelCase -> snake_case ko'rinishida belgilanadi (masalan, UserProfile -> user_profile, Category -> category).

# models/author.py
from postgresdb3.orm import Model, fields

class Author(Model):
    name = fields.String(length=100)
    # Author modelida profile va posts munosabatlari avtomatik dynamic resolve bo'ladi

# models/post.py (Author yoki Tag modelini bevosita import qilish SHART EMAS)
from postgresdb3.orm import Model, fields

class Post(Model):
    title = fields.String(length=200)
    # String reference - Circular import bo'lmaydi:
    author = fields.ForeignKey("Author", related_name="posts", on_delete=fields.CASCADE)
    tags = fields.ManyToMany("Tag", related_name="posts")

# models/profile.py
class Profile(Model):
    bio = fields.Text()
    author = fields.OneToOne("Author", related_name="profile", on_delete=fields.CASCADE)

Munosabatlardan foydalanish:

# Forward va Reverse munosabatlarni chaqirish:
post = Post.first(id=1)
author = post.author              # Post muallifini olish

author_posts = author.posts.all()  # Muallifning barcha postlarini olish
author_profile = author.profile   # OneToOne profile obyektini olish

# ManyToMany bilan ishlash:
post.tags.add(tag1, tag2)         # Tag qo'shish
post_tags = post.tags.all()       # Post taglarini olish
post.tags.remove(tag1)            # Tag o'chirish

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.1.3

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.1.3
File Size Uploaded
postgresdb3-3.1.3.tar.gz 60.2 kB Details

Built distribution (wheel)

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

Total release size: 115.6 kB

Release files / postgresdb3-3.1.3.tar.gz

Download URL postgresdb3-3.1.3.tar.gz
Size 60.2 kB
Tags Source
SHA-256 checksum
How to use checksums
d9146567045167d56a51e0d164cbc8568779eea107e18c69102f03892e2b69f3
BLAKE2b-256 checksum
How to use checksums
fbdada6e3761b08c0fb3fa37c7c801571e0d7e21cef9df66ef18b0bb9181d3d6
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.1.3-py3-none-any.whl

Download URL postgresdb3-3.1.3-py3-none-any.whl
Size 55.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bb95cfdbb12cc85e9990cf0a03f78b6db447ac3488db8aa9c736abed8f3d732c
BLAKE2b-256 checksum
How to use checksums
35cbf274797dd263ea898e42cca18f199fcc23cf3be5e0997b7fb2cd2398bd6e
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

This release

3.1.3 This release

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

3.0.4

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