High-Performance Sync and Async PostgreSQL ORM for Python
Project description
PostgresDB3 - High-Performance Python ORM
PostgresDB3 — bu PostgreSQL uchun mo'ljallangan zamonaviy, tezkor va ham sinxron, ham asinxron ishlash imkoniyatiga ega bo'lgan ORM (Object-Relational Mapping) kutubxonasi.
U Django ORM kabi qulay va oson tushuniladi, lekin o'zida asinxronlik (asyncpg) va ko'plab yuqori texnologik xususiyatlarni mujassamlashtirgan. Kichik botlardan tortib, o'ta katta masshtabdagi (Highload) loyihalargacha bemalol ishlata olasiz!
📦 O'rnatish
Kutubxonani o'rnatish uchun terminalda quyidagi buyruqni kiriting:
pip install postgresdb3
🚀 Yangi (v2.0) Imkoniyatlari
Ushbu "Enterprise" versiyada loyihaga quyidagi gigant imkoniyatlar qo'shildi:
values()vavalues_list()- Xotirani tejash uchun to'g'ridan to'g'ridictyokilistqaytarish.get_or_create()vaupdate_or_create()- Kodlarni sezilarli darajada qisqartirish.__orqali Auto-Join - Munosabatlarni avtomatik bog'lash (Masalan:filter(user__profile__age__gt=18)).- Mavhum Modellar (Abstract Models) - Qayta-qayta kod yozmaslik uchun
class Meta: abstract = True. annotate()vaaggregate()- Murakkab matematik va guruhlash amallari.update()vadelete()(Ommaviy) - Obyektlarni bazada bitta qatorda ommaviy tahrirlash yoki o'chirish.
⚡ Tezkor Boshlash
PostgresDB3 bir vaqtning o'zida ikkita dunyoni qo'llab-quvvatlaydi. Xohlasangiz Sinxron, xohlasangiz Asinxron loyihalarda bir xil sintaksis bilan ishlay olasiz.
1. Ulanishni sozlash
from postgresdb3 import PostgresDB, AsyncPostgresDB
# Sinxron ulanish (psycopg2 asosida)
db_sync = PostgresDB("my_db", "user", "password", host="localhost", port=5432, echo=True)
# Asinxron ulanish (asyncpg asosida)
db_async = AsyncPostgresDB("my_db", "user", "password", host="localhost", port=5432, echo=True)
(Eslatma: echo=True yoqilsa, barcha bajarilayotgan SQL so'rovlar terminalda ko'rinib turadi, bu debug uchun juda foydali).
2. Modellarni Yaratish (Abstract Model namunasida)
from postgresdb3.orm.models import Model, AsyncModel
from postgresdb3 import String, Integer, Float, Timestamp
Model.db = db_sync
class TimestampedModel(Model):
class Meta:
abstract = True # Jadval yaratilmaydi
created_at = Timestamp(auto_now_add=True)
class User(TimestampedModel):
name = String(length=50)
age = Integer(default=18)
score = Float(default=0.0)
class Meta:
unique_together = (("name", "age"),) # Ism va yosh bir xil takrorlanmasligi kerak
index_together = (("score",),) # Qidiruvni tezlashtirish uchun index
3. CRUD Operatsiyalari
Yangi funksiyalar yordamida:
# Yaratish yoki o'qish (Bazada bo'lmasa yaratadi)
user, created = User.get_or_create(name="Ali", defaults={'age': 25, 'score': 10.0})
# Ommaviy yangilash (Xotirani to'ldirmasdan)
User.query().filter(age__lt=18).update(score=0.0)
# Ommaviy o'chirish
User.query().filter(score=0.0).delete()
Tezkor O'qish (Values & Values List): Agar modellar bilan ishlash shart bo'lmasa va faqat JSON yuborish kerak bo'lsa:
users_dict = User.query().values('id', 'name').all()
# [{'id': 1, 'name': 'Ali'}, {'id': 2, 'name': 'Vali'}]
names_list = User.query().values_list('name', flat=True).all()
# ['Ali', 'Vali']
🔄 Migratsiya Tizimi (CLI)
Siz o'z loyihangiz papkasida bitta manage.py yaratib olib, jadvallarni SQL o'qib-o'tirmasdan terminal orqali avtomatik yangilab borishingiz mumkin.
manage.py:
import sys
from postgresdb3 import execute_from_command_line
from myapp.models import db_sync # Sizning bazaga ulangan db obyektingiz
# Modellar dvigatelga ko'rinishi uchun barchasini import qilish SHART!
from myapp.models import User, Post
if __name__ == "__main__":
execute_from_command_line(db_sync, sys.argv)
Terminalda:
# Modellar asosida migratsiya faylini tayyorlash
python manage.py makemigrations initial_setup
# Bazaga jadvallarni qo'shish
python manage.py migrate
# Oxirgi migratsiyani bekor qilish va qaytarish (Rollback)
python manage.py undo
🔍 Murakkab Qidiruv va Aloqalar (Relations)
Auto-Join (Bog'langan jadvallar bo'ylab o'tish):
Qo'lda JOIN yozish o'rniga, qo'shaloq chiziqcha __ ishlating:
posts = Post.query().filter(author__name__startswith='A').all()
Q va F ifodalar (Murakkab shartlar):
from postgresdb3 import Q, F
# OR (|) sharti
User.query().filter(Q(age__gt=20) | Q(name="Ali")).all()
# Yoshiga nisbatan score'i katta bo'lganlarni izlash
User.query().filter(score__gt=F("age")).all()
N+1 xatoligini chetlab o'tish (select_related & prefetch_related):
# ForeignKey uchun (1 ta SQL so'rov)
posts = Post.query().select_related("author").all()
# ManyToMany uchun (Optimallashtirilgan yig'ish)
posts = Post.query().prefetch_related("tags").all()
📊 Katta Ma'lumotlar bilan Ishlash (Bulk & Pagination)
Sahifalash (Pagination): Foydalanuvchiga ma'lumotlarni qismlab taqdim etish:
result = User.query().paginate(page=1, per_page=20)
print(result['total']) # Jami elementlar soni
print(result['has_next']) # Keyingi sahifa bormi?
print(result['data']) # Modellar ro'yxati (20 ta)
Ommaviy Yozish (Bulk Create): 10,000 ta obyekti birma-bir emas, bitta so'rov orqali kiritish:
users = [User(name=f"U-{i}", age=20) for i in range(10000)]
User.bulk_create(users)
📈 Agregatsiya va Annotatsiya (GroupBy)
Baza orqali kalkulyatsiyalarni amalga oshirish:
from postgresdb3 import Sum, Avg, Count
# Jami obshiy statiska:
result = User.query().aggregate(
total_score=Sum("score"),
avg_age=Avg("age")
)
# {'total_score': 1500, 'avg_age': 25}
# Guruhlab hisoblash (Masalan: Har bir userning postlari soni):
users_with_count = User.query().annotate(post_count=Count("posts")).all()
for u in users_with_count:
print(u.name, u.post_count)
Ushbu ORM kutubxonasi Python olamidagi ilg'or texnologiyalar yordamida tezlik va barqarorlikni birinchi o'ringa qo'yuvchi mutaxassislar uchun maxsus qurilgan.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file postgresdb3-2.0.1.tar.gz.
File metadata
- Download URL: postgresdb3-2.0.1.tar.gz
- Upload date:
- Size: 28.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
489f1f9ddf404fa1e3dd3d9d6f1fcf45131480a03fc0c27cfd1374b73cfef771
|
|
| MD5 |
0837e5bb7b9b5006495d82f81f08c830
|
|
| BLAKE2b-256 |
aaa904aa4115b539d0d1c586ade2a54e892e8699de2d78982b723af1474af81c
|
File details
Details for the file postgresdb3-2.0.1-py3-none-any.whl.
File metadata
- Download URL: postgresdb3-2.0.1-py3-none-any.whl
- Upload date:
- Size: 32.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4d6e0ccb57537ae4e8f155971ebb81f85b62e902d3c487d113b062ba9ebd5094
|
|
| MD5 |
6882d1e6d299513be96eaffa000d9265
|
|
| BLAKE2b-256 |
06f955a907e9a01120e8c3dbf9d77e565ff3ed6c0bc55ab652b06686e6030bbd
|