postgresdb3 0.3.0__tar.gz → 0.3.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: postgresdb3
3
- Version: 0.3.0
3
+ Version: 0.3.2
4
4
  Summary: Python uchun oddiy PostgreSQL wrapper
5
5
  Author: Abdulbosit Alijonov
6
6
  Project-URL: Source Code, https://github.com/AlijonovUz/PostgresDB
@@ -36,7 +36,7 @@ pip install postgresdb3
36
36
 
37
37
  ## Foydalanish (Sync)
38
38
 
39
- ``` python
39
+ ```python
40
40
  from postgresdb3 import PostgresDB
41
41
 
42
42
  # Bazaga ulanish
@@ -44,16 +44,23 @@ db = PostgresDB(
44
44
  database="mydb",
45
45
  user="postgres",
46
46
  password="mypassword",
47
- host="localhost", # ixtiyoriy
48
- port=5432 # ixtiyoriy
47
+ host="localhost", # ixtiyoriy
48
+ port=5432 # ixtiyoriy
49
49
  )
50
50
 
51
51
  # Jadval yaratish
52
52
  db.create("users", "id SERIAL PRIMARY KEY, name VARCHAR(100), age INT")
53
53
 
54
- # Ma'lumot qo'shish
54
+ # Bitta qator qo'shish
55
55
  db.insert("users", "name, age", ("Ali", 25))
56
56
 
57
+ # Bir nechta qator qo'shish
58
+ db.insert_many(
59
+ "users",
60
+ "name, age",
61
+ [("Vali", 30), ("Gulnoza", 22), ("Hasan", 28)]
62
+ )
63
+
57
64
  # Ma'lumotlarni olish
58
65
  users = db.select("users")
59
66
  print(users)
@@ -66,10 +73,14 @@ print(user)
66
73
  adults = db.select("users", where=("age > %s", [18]))
67
74
  print(adults)
68
75
 
69
- # Bir nechta shart
76
+ # Bir nechta shart bilan
70
77
  specific_users = db.select("users", where=("age > %s AND name = %s", [18, "Ali"]))
71
78
  print(specific_users)
72
79
 
80
+ # Faqat 2 ta qatorni olish
81
+ users = db.select("users", fetchmany=2)
82
+ print(users)
83
+
73
84
  # Jadvaldagi ma'lumotni yangilash
74
85
  db.update("users", "age", 26, "name", "Ali")
75
86
 
@@ -77,7 +88,14 @@ db.update("users", "age", 26, "name", "Ali")
77
88
  db.delete("users", "name", "Ali")
78
89
 
79
90
  # Jadvalni o'chirish
80
- db.drop("users")
91
+ db.drop("users", cascade=False)
92
+
93
+ # To‘g‘ridan-to‘g‘ri SQL bajarish (raw)
94
+ result = db.raw("SELECT name, age FROM users WHERE age > %s", [25], fetchall=True)
95
+ print(result)
96
+
97
+ # Connectionni yopish
98
+ db.close()
81
99
  ```
82
100
 
83
101
  ## Foydalanish (Async)
@@ -87,21 +105,26 @@ import asyncio
87
105
  from postgresdb3 import AsyncPostgresDB
88
106
 
89
107
  async def main():
90
- # Bazaga ulanish
91
108
  db = AsyncPostgresDB(
92
109
  database="mydb",
93
110
  user="postgres",
94
111
  password="mypassword",
95
- host="localhost", # ixtiyoriy
96
- port=5432 # ixtiyoriy
112
+ host="localhost",
113
+ port=5432
97
114
  )
98
115
 
99
116
  # Jadval yaratish
100
117
  await db.create("users", "id SERIAL PRIMARY KEY, name VARCHAR(100), age INT")
101
118
 
102
- # Ma'lumot qo'shish
119
+ # Bitta qator qo'shish
103
120
  await db.insert("users", "name, age", ["Ali", 25])
104
- await db.insert("users", "name, age", ["Vali", 30])
121
+
122
+ # Bir nechta qator qo'shish
123
+ await db.insert_many(
124
+ "users",
125
+ "name, age",
126
+ [["Vali", 30], ["Gulnoza", 22], ["Hasan", 28]]
127
+ )
105
128
 
106
129
  # Barcha ma'lumotlarni olish
107
130
  users = await db.select("users")
@@ -115,10 +138,14 @@ async def main():
115
138
  adults = await db.select("users", where=("age > $1", [18]))
116
139
  print("Kattalar:", adults)
117
140
 
118
- # Bir nechta shart
141
+ # Bir nechta shart bilan
119
142
  specific_users = await db.select("users", where=("age > $1 AND name = $2", [18, "Ali"]))
120
143
  print("Maxsus foydalanuvchi:", specific_users)
121
-
144
+
145
+ # Faqat 2 ta qatorni olish
146
+ users = await db.select("users", fetchmany=2)
147
+ print(users)
148
+
122
149
  # Jadvaldagi ma'lumotni yangilash
123
150
  await db.update("users", "age", 26, "name", "Ali")
124
151
 
@@ -126,12 +153,15 @@ async def main():
126
153
  await db.delete("users", "name", "Ali")
127
154
 
128
155
  # Jadvalni o'chirish
129
- await db.drop("users")
156
+ await db.drop("users", cascade=False)
157
+
158
+ # To‘g‘ridan-to‘g‘ri SQL bajarish (raw)
159
+ result = await db.raw("SELECT name, age FROM users WHERE age > $1", [25], fetchall=True)
160
+ print("Raw query result:", result)
130
161
 
131
162
  # Connection poolni yopish
132
163
  await db.close_pool()
133
164
 
134
- # Asinxron loop ishga tushirish
135
165
  asyncio.run(main())
136
166
  ```
137
167
 
@@ -143,10 +173,12 @@ asyncio.run(main())
143
173
  **create(table, columns)** --- jadval yaratish, `columns` SQL
144
174
  sintaksisida.
145
175
 
146
- **drop(table)** --- jadvalni o'chirish.
176
+ **drop(table, cascade=False)** --- jadvalni o'chirish.
147
177
 
148
178
  **insert(table, columns, values)** --- ma'lumot qo'shish.
149
179
 
180
+ **insert_many(table, columns, values_list)** --- bir nechta qator qo‘shish
181
+
150
182
  **select(table, columns="\*", where=None, join=None, group_by=None,
151
183
  order_by=None, limit=None, fetchone=False)** --- ma'lumotlarni olish.
152
184
 
@@ -168,19 +200,14 @@ ma'lumotni yangilash.
168
200
 
169
201
  **delete(table, where_column, where_value)** --- ma'lumotni o'chirish.
170
202
 
171
- **manager(sql, params=None, commit=False, fetchall=False,
172
- fetchone=False)** --- barcha SQL amallarni bajaruvchi yagona metod.
173
-
174
203
  ## Qo‘shimcha
175
204
 
176
- `%s` bilan parametrizatsiya qilish xavfsiz va SQL injection'dan himoya qiladi.
205
+ `%s`,`$1` bilan parametrizatsiya qilish xavfsiz va SQL injection'dan himoya qiladi.
177
206
 
178
- `where` va `join` `list` yoki `tuple` yordamida murakkab so‘rovlar yozish mumkin.
207
+ `where` va `join` yordamida murakkab so‘rovlar yozish mumkin.
179
208
 
180
209
  `limit` va `order_by` parametrlaridan foydalanib ma'lumotlarni tartiblash va cheklash oson.
181
210
 
182
211
  `commit=True` bo‘lgan amallar darhol bazaga yoziladi, select() esa hech qachon o‘zgartirish kiritmaydi.
183
212
 
184
- `manager()` — barcha SQL buyruqlarini bajaruvchi yagona metod bo‘lib, kerak bo‘lganda to‘g‘ridan‑to‘g‘ri SQL yozish imkonini beradi.
185
-
186
- PostgreSQL bilan ishlash uchun `psycopg2` kutubxonasi talab qilinadi.
213
+ `raw()` — barcha SQL buyruqlarini bajaruvchi yagona metod bo‘lib, kerak bo‘lganda to‘g‘ridan‑to‘g‘ri SQL yozish imkonini beradi.
@@ -14,7 +14,7 @@ pip install postgresdb3
14
14
 
15
15
  ## Foydalanish (Sync)
16
16
 
17
- ``` python
17
+ ```python
18
18
  from postgresdb3 import PostgresDB
19
19
 
20
20
  # Bazaga ulanish
@@ -22,16 +22,23 @@ db = PostgresDB(
22
22
  database="mydb",
23
23
  user="postgres",
24
24
  password="mypassword",
25
- host="localhost", # ixtiyoriy
26
- port=5432 # ixtiyoriy
25
+ host="localhost", # ixtiyoriy
26
+ port=5432 # ixtiyoriy
27
27
  )
28
28
 
29
29
  # Jadval yaratish
30
30
  db.create("users", "id SERIAL PRIMARY KEY, name VARCHAR(100), age INT")
31
31
 
32
- # Ma'lumot qo'shish
32
+ # Bitta qator qo'shish
33
33
  db.insert("users", "name, age", ("Ali", 25))
34
34
 
35
+ # Bir nechta qator qo'shish
36
+ db.insert_many(
37
+ "users",
38
+ "name, age",
39
+ [("Vali", 30), ("Gulnoza", 22), ("Hasan", 28)]
40
+ )
41
+
35
42
  # Ma'lumotlarni olish
36
43
  users = db.select("users")
37
44
  print(users)
@@ -44,10 +51,14 @@ print(user)
44
51
  adults = db.select("users", where=("age > %s", [18]))
45
52
  print(adults)
46
53
 
47
- # Bir nechta shart
54
+ # Bir nechta shart bilan
48
55
  specific_users = db.select("users", where=("age > %s AND name = %s", [18, "Ali"]))
49
56
  print(specific_users)
50
57
 
58
+ # Faqat 2 ta qatorni olish
59
+ users = db.select("users", fetchmany=2)
60
+ print(users)
61
+
51
62
  # Jadvaldagi ma'lumotni yangilash
52
63
  db.update("users", "age", 26, "name", "Ali")
53
64
 
@@ -55,7 +66,14 @@ db.update("users", "age", 26, "name", "Ali")
55
66
  db.delete("users", "name", "Ali")
56
67
 
57
68
  # Jadvalni o'chirish
58
- db.drop("users")
69
+ db.drop("users", cascade=False)
70
+
71
+ # To‘g‘ridan-to‘g‘ri SQL bajarish (raw)
72
+ result = db.raw("SELECT name, age FROM users WHERE age > %s", [25], fetchall=True)
73
+ print(result)
74
+
75
+ # Connectionni yopish
76
+ db.close()
59
77
  ```
60
78
 
61
79
  ## Foydalanish (Async)
@@ -65,21 +83,26 @@ import asyncio
65
83
  from postgresdb3 import AsyncPostgresDB
66
84
 
67
85
  async def main():
68
- # Bazaga ulanish
69
86
  db = AsyncPostgresDB(
70
87
  database="mydb",
71
88
  user="postgres",
72
89
  password="mypassword",
73
- host="localhost", # ixtiyoriy
74
- port=5432 # ixtiyoriy
90
+ host="localhost",
91
+ port=5432
75
92
  )
76
93
 
77
94
  # Jadval yaratish
78
95
  await db.create("users", "id SERIAL PRIMARY KEY, name VARCHAR(100), age INT")
79
96
 
80
- # Ma'lumot qo'shish
97
+ # Bitta qator qo'shish
81
98
  await db.insert("users", "name, age", ["Ali", 25])
82
- await db.insert("users", "name, age", ["Vali", 30])
99
+
100
+ # Bir nechta qator qo'shish
101
+ await db.insert_many(
102
+ "users",
103
+ "name, age",
104
+ [["Vali", 30], ["Gulnoza", 22], ["Hasan", 28]]
105
+ )
83
106
 
84
107
  # Barcha ma'lumotlarni olish
85
108
  users = await db.select("users")
@@ -93,10 +116,14 @@ async def main():
93
116
  adults = await db.select("users", where=("age > $1", [18]))
94
117
  print("Kattalar:", adults)
95
118
 
96
- # Bir nechta shart
119
+ # Bir nechta shart bilan
97
120
  specific_users = await db.select("users", where=("age > $1 AND name = $2", [18, "Ali"]))
98
121
  print("Maxsus foydalanuvchi:", specific_users)
99
-
122
+
123
+ # Faqat 2 ta qatorni olish
124
+ users = await db.select("users", fetchmany=2)
125
+ print(users)
126
+
100
127
  # Jadvaldagi ma'lumotni yangilash
101
128
  await db.update("users", "age", 26, "name", "Ali")
102
129
 
@@ -104,12 +131,15 @@ async def main():
104
131
  await db.delete("users", "name", "Ali")
105
132
 
106
133
  # Jadvalni o'chirish
107
- await db.drop("users")
134
+ await db.drop("users", cascade=False)
135
+
136
+ # To‘g‘ridan-to‘g‘ri SQL bajarish (raw)
137
+ result = await db.raw("SELECT name, age FROM users WHERE age > $1", [25], fetchall=True)
138
+ print("Raw query result:", result)
108
139
 
109
140
  # Connection poolni yopish
110
141
  await db.close_pool()
111
142
 
112
- # Asinxron loop ishga tushirish
113
143
  asyncio.run(main())
114
144
  ```
115
145
 
@@ -121,10 +151,12 @@ asyncio.run(main())
121
151
  **create(table, columns)** --- jadval yaratish, `columns` SQL
122
152
  sintaksisida.
123
153
 
124
- **drop(table)** --- jadvalni o'chirish.
154
+ **drop(table, cascade=False)** --- jadvalni o'chirish.
125
155
 
126
156
  **insert(table, columns, values)** --- ma'lumot qo'shish.
127
157
 
158
+ **insert_many(table, columns, values_list)** --- bir nechta qator qo‘shish
159
+
128
160
  **select(table, columns="\*", where=None, join=None, group_by=None,
129
161
  order_by=None, limit=None, fetchone=False)** --- ma'lumotlarni olish.
130
162
 
@@ -146,19 +178,14 @@ ma'lumotni yangilash.
146
178
 
147
179
  **delete(table, where_column, where_value)** --- ma'lumotni o'chirish.
148
180
 
149
- **manager(sql, params=None, commit=False, fetchall=False,
150
- fetchone=False)** --- barcha SQL amallarni bajaruvchi yagona metod.
151
-
152
181
  ## Qo‘shimcha
153
182
 
154
- `%s` bilan parametrizatsiya qilish xavfsiz va SQL injection'dan himoya qiladi.
183
+ `%s`,`$1` bilan parametrizatsiya qilish xavfsiz va SQL injection'dan himoya qiladi.
155
184
 
156
- `where` va `join` `list` yoki `tuple` yordamida murakkab so‘rovlar yozish mumkin.
185
+ `where` va `join` yordamida murakkab so‘rovlar yozish mumkin.
157
186
 
158
187
  `limit` va `order_by` parametrlaridan foydalanib ma'lumotlarni tartiblash va cheklash oson.
159
188
 
160
189
  `commit=True` bo‘lgan amallar darhol bazaga yoziladi, select() esa hech qachon o‘zgartirish kiritmaydi.
161
190
 
162
- `manager()` — barcha SQL buyruqlarini bajaruvchi yagona metod bo‘lib, kerak bo‘lganda to‘g‘ridan‑to‘g‘ri SQL yozish imkonini beradi.
163
-
164
- PostgreSQL bilan ishlash uchun `psycopg2` kutubxonasi talab qilinadi.
191
+ `raw()` — barcha SQL buyruqlarini bajaruvchi yagona metod bo‘lib, kerak bo‘lganda to‘g‘ridan‑to‘g‘ri SQL yozish imkonini beradi.
@@ -81,22 +81,30 @@ class AsyncPostgresDB:
81
81
  """
82
82
  await self._manager(f"CREATE TABLE IF NOT EXISTS {table} ({columns})", commit=True)
83
83
 
84
- async def drop(self, table: str) -> None:
84
+ async def drop(self, table: str, cascade: bool = False) -> None:
85
85
  """
86
86
  Jadvalni o‘chiradi (agar mavjud bo‘lsa).
87
87
 
88
88
  Args:
89
89
  table (str): Jadval nomi.
90
+ cascade (bool): Agar True bo‘lsa, jadval bilan bog‘liq barcha obyektlar ham o‘chiradi. Default: True
90
91
  """
91
- await self._manager(f"DROP TABLE IF EXISTS {table} CASCADE", commit=True)
92
+ sql = f"DROP TABLE IF EXISTS {table}"
93
+ if cascade:
94
+ sql += " CASCADE"
95
+
96
+ await self._manager(sql, commit=True)
92
97
 
93
98
  async def select(
94
- self, table: str, columns: str = "*",
99
+ self,
100
+ table: str,
101
+ columns: str = "*",
95
102
  where: Optional[List[Any]] = None,
96
103
  join: Optional[List[tuple]] = None,
97
104
  group_by: Optional[str] = None,
98
105
  order_by: Optional[str] = None,
99
106
  limit: Optional[int] = None,
107
+ offset: Optional[int] = None,
100
108
  fetchone: bool = False
101
109
  ) -> Any:
102
110
  """
@@ -110,6 +118,7 @@ class AsyncPostgresDB:
110
118
  group_by (Optional[str]): GROUP BY ustuni.
111
119
  order_by (Optional[str]): ORDER BY qoidasi.
112
120
  limit (Optional[int]): LIMIT qiymati.
121
+ offset (Optional[int]): OFFSET qiymati.
113
122
  fetchone (bool): True bo‘lsa faqat bitta qator qaytaradi.
114
123
 
115
124
  Returns:
@@ -137,6 +146,10 @@ class AsyncPostgresDB:
137
146
  sql += f" LIMIT $%d" % (len(params) + 1)
138
147
  params.append(limit)
139
148
 
149
+ if offset is not None:
150
+ sql += " OFFSET $%d" % (len(params) + 1)
151
+ params.append(offset)
152
+
140
153
  return await self._manager(sql, *params, fetchone=fetchone, fetchall=not fetchone)
141
154
 
142
155
  async def insert(self, table: str, columns: str, values: List[Any]) -> None:
@@ -233,7 +246,7 @@ class AsyncPostgresDB:
233
246
  SELECT table_name
234
247
  FROM information_schema.tables
235
248
  WHERE table_schema = $1
236
- ORDER BY table_name \
249
+ ORDER BY table_name;
237
250
  """
238
251
  result = await self._manager(sql, schema, fetchall=True)
239
252
  return [r["table_name"] for r in result]
@@ -254,7 +267,7 @@ class AsyncPostgresDB:
254
267
  FROM information_schema.columns
255
268
  WHERE table_schema = $1
256
269
  AND table_name = $2
257
- ORDER BY ordinal_position \
270
+ ORDER BY ordinal_position; \
258
271
  """
259
272
  return await self._manager(sql, schema, table, fetchall=True)
260
273
 
@@ -1,4 +1,4 @@
1
- from typing import Any
1
+ from typing import Any, Optional
2
2
  import psycopg2
3
3
 
4
4
 
@@ -22,7 +22,7 @@ class PostgresDB:
22
22
  def _manager(
23
23
  self,
24
24
  sql: str,
25
- params: list | tuple | None = None,
25
+ params: Optional[list | tuple] = None,
26
26
  *,
27
27
  commit: bool = False,
28
28
  many: bool = False,
@@ -85,6 +85,8 @@ class PostgresDB:
85
85
  - Tashqaridan bevosita chaqirish tavsiya etilmaydi.
86
86
  """
87
87
 
88
+ if not sql or not sql.strip():
89
+ raise ValueError("SQL query cannot be empty")
88
90
  if fetchone and fetchall:
89
91
  raise ValueError("fetchone and fetchall cannot be True at the same time")
90
92
  if many and (fetchone or fetchall or fetchmany):
@@ -111,6 +113,12 @@ class PostgresDB:
111
113
  return result
112
114
 
113
115
  def close(self) -> None:
116
+ """
117
+ Faol bazaga ulanishni yopadi.
118
+
119
+ Bu metod chaqirilgandan so‘ng, connection obyekti ishlatilmaydi.
120
+ Ulanishni yopishdan oldin, har qanday kutilayotgan tranzaksiyalarni commit qilganingizga ishonch hosil qiling.
121
+ """
114
122
  self.connection.close()
115
123
 
116
124
  def raw(
@@ -164,8 +172,6 @@ class PostgresDB:
164
172
  ------
165
173
  >>> db.raw("SELECT * FROM users WHERE age > %s", (18,), fetchall=True)
166
174
  """
167
- if fetchone and fetchall:
168
- raise ValueError("fetchone va fetchall bir vaqtda True bo‘la olmaydi")
169
175
 
170
176
  return self._manager(
171
177
  sql,
@@ -185,11 +191,17 @@ class PostgresDB:
185
191
  sql = f"CREATE TABLE IF NOT EXISTS {table} ({columns})"
186
192
  self._manager(sql, commit=True)
187
193
 
188
- def drop(self, table: str) -> None:
194
+ def drop(self, table: str, cascade: bool = False) -> None:
189
195
  """
190
- table: str - o'chiriladigan jadval nomi
196
+ Jadvalni o'chiradi.
197
+
198
+ Parametrlar:
199
+ table (str): O'chiriladigan jadval nomi
200
+ cascade (bool): Agar True bo'lsa, jadval bilan bog'liq barcha obyektlar ham o'chiriladi. Default: True
191
201
  """
192
- sql = f"DROP TABLE IF EXISTS {table} CASCADE"
202
+ sql = f"DROP TABLE IF EXISTS {table}"
203
+ if cascade:
204
+ sql += " CASCADE"
193
205
  self._manager(sql, commit=True)
194
206
 
195
207
  def select(
@@ -201,7 +213,9 @@ class PostgresDB:
201
213
  group_by: str | None = None,
202
214
  order_by: str | None = None,
203
215
  limit: int | None = None,
204
- fetchone: bool = False
216
+ offset: int | None = None,
217
+ fetchone: bool = False,
218
+ fetchmany: int | None = None
205
219
  ) -> Any:
206
220
  """
207
221
  table: str — asosiy jadval
@@ -211,6 +225,9 @@ class PostgresDB:
211
225
  group_by: str | None — "age"
212
226
  order_by: str | None — "age DESC"
213
227
  limit: int | None
228
+ offset: int | None
229
+ fetchone: bool
230
+ fetchmany: int | None
214
231
  """
215
232
 
216
233
  sql = f"SELECT {columns} FROM {table}"
@@ -231,13 +248,20 @@ class PostgresDB:
231
248
  if order_by:
232
249
  sql += f" ORDER BY {order_by}"
233
250
 
234
- if limit:
251
+ if limit is not None:
235
252
  sql += f" LIMIT %s"
236
253
  params.append(limit)
237
254
 
255
+ if offset is not None:
256
+ sql += " OFFSET %s"
257
+ params.append(offset)
258
+
238
259
  if fetchone:
239
260
  return self._manager(sql, params, fetchone=True)
240
- return self._manager(sql, params, fetchall=True)
261
+ elif fetchmany is not None:
262
+ return self._manager(sql, params, fetchmany=fetchmany)
263
+ else:
264
+ return self._manager(sql, params, fetchall=True)
241
265
 
242
266
  def insert(self, table: str, columns: str, values: tuple | list) -> None:
243
267
  """
@@ -313,7 +337,7 @@ class PostgresDB:
313
337
  SELECT table_name
314
338
  FROM information_schema.tables
315
339
  WHERE table_schema = %s
316
- ORDER BY table_name; \
340
+ ORDER BY table_name;
317
341
  """
318
342
  return self._manager(sql, (schema,), fetchall=True)
319
343
 
@@ -329,7 +353,7 @@ class PostgresDB:
329
353
  FROM information_schema.columns
330
354
  WHERE table_schema = %s
331
355
  AND table_name = %s
332
- ORDER BY ordinal_position; \
356
+ ORDER BY ordinal_position;
333
357
  """
334
358
  return self._manager(sql, (schema, table), fetchall=True)
335
359
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: postgresdb3
3
- Version: 0.3.0
3
+ Version: 0.3.2
4
4
  Summary: Python uchun oddiy PostgreSQL wrapper
5
5
  Author: Abdulbosit Alijonov
6
6
  Project-URL: Source Code, https://github.com/AlijonovUz/PostgresDB
@@ -36,7 +36,7 @@ pip install postgresdb3
36
36
 
37
37
  ## Foydalanish (Sync)
38
38
 
39
- ``` python
39
+ ```python
40
40
  from postgresdb3 import PostgresDB
41
41
 
42
42
  # Bazaga ulanish
@@ -44,16 +44,23 @@ db = PostgresDB(
44
44
  database="mydb",
45
45
  user="postgres",
46
46
  password="mypassword",
47
- host="localhost", # ixtiyoriy
48
- port=5432 # ixtiyoriy
47
+ host="localhost", # ixtiyoriy
48
+ port=5432 # ixtiyoriy
49
49
  )
50
50
 
51
51
  # Jadval yaratish
52
52
  db.create("users", "id SERIAL PRIMARY KEY, name VARCHAR(100), age INT")
53
53
 
54
- # Ma'lumot qo'shish
54
+ # Bitta qator qo'shish
55
55
  db.insert("users", "name, age", ("Ali", 25))
56
56
 
57
+ # Bir nechta qator qo'shish
58
+ db.insert_many(
59
+ "users",
60
+ "name, age",
61
+ [("Vali", 30), ("Gulnoza", 22), ("Hasan", 28)]
62
+ )
63
+
57
64
  # Ma'lumotlarni olish
58
65
  users = db.select("users")
59
66
  print(users)
@@ -66,10 +73,14 @@ print(user)
66
73
  adults = db.select("users", where=("age > %s", [18]))
67
74
  print(adults)
68
75
 
69
- # Bir nechta shart
76
+ # Bir nechta shart bilan
70
77
  specific_users = db.select("users", where=("age > %s AND name = %s", [18, "Ali"]))
71
78
  print(specific_users)
72
79
 
80
+ # Faqat 2 ta qatorni olish
81
+ users = db.select("users", fetchmany=2)
82
+ print(users)
83
+
73
84
  # Jadvaldagi ma'lumotni yangilash
74
85
  db.update("users", "age", 26, "name", "Ali")
75
86
 
@@ -77,7 +88,14 @@ db.update("users", "age", 26, "name", "Ali")
77
88
  db.delete("users", "name", "Ali")
78
89
 
79
90
  # Jadvalni o'chirish
80
- db.drop("users")
91
+ db.drop("users", cascade=False)
92
+
93
+ # To‘g‘ridan-to‘g‘ri SQL bajarish (raw)
94
+ result = db.raw("SELECT name, age FROM users WHERE age > %s", [25], fetchall=True)
95
+ print(result)
96
+
97
+ # Connectionni yopish
98
+ db.close()
81
99
  ```
82
100
 
83
101
  ## Foydalanish (Async)
@@ -87,21 +105,26 @@ import asyncio
87
105
  from postgresdb3 import AsyncPostgresDB
88
106
 
89
107
  async def main():
90
- # Bazaga ulanish
91
108
  db = AsyncPostgresDB(
92
109
  database="mydb",
93
110
  user="postgres",
94
111
  password="mypassword",
95
- host="localhost", # ixtiyoriy
96
- port=5432 # ixtiyoriy
112
+ host="localhost",
113
+ port=5432
97
114
  )
98
115
 
99
116
  # Jadval yaratish
100
117
  await db.create("users", "id SERIAL PRIMARY KEY, name VARCHAR(100), age INT")
101
118
 
102
- # Ma'lumot qo'shish
119
+ # Bitta qator qo'shish
103
120
  await db.insert("users", "name, age", ["Ali", 25])
104
- await db.insert("users", "name, age", ["Vali", 30])
121
+
122
+ # Bir nechta qator qo'shish
123
+ await db.insert_many(
124
+ "users",
125
+ "name, age",
126
+ [["Vali", 30], ["Gulnoza", 22], ["Hasan", 28]]
127
+ )
105
128
 
106
129
  # Barcha ma'lumotlarni olish
107
130
  users = await db.select("users")
@@ -115,10 +138,14 @@ async def main():
115
138
  adults = await db.select("users", where=("age > $1", [18]))
116
139
  print("Kattalar:", adults)
117
140
 
118
- # Bir nechta shart
141
+ # Bir nechta shart bilan
119
142
  specific_users = await db.select("users", where=("age > $1 AND name = $2", [18, "Ali"]))
120
143
  print("Maxsus foydalanuvchi:", specific_users)
121
-
144
+
145
+ # Faqat 2 ta qatorni olish
146
+ users = await db.select("users", fetchmany=2)
147
+ print(users)
148
+
122
149
  # Jadvaldagi ma'lumotni yangilash
123
150
  await db.update("users", "age", 26, "name", "Ali")
124
151
 
@@ -126,12 +153,15 @@ async def main():
126
153
  await db.delete("users", "name", "Ali")
127
154
 
128
155
  # Jadvalni o'chirish
129
- await db.drop("users")
156
+ await db.drop("users", cascade=False)
157
+
158
+ # To‘g‘ridan-to‘g‘ri SQL bajarish (raw)
159
+ result = await db.raw("SELECT name, age FROM users WHERE age > $1", [25], fetchall=True)
160
+ print("Raw query result:", result)
130
161
 
131
162
  # Connection poolni yopish
132
163
  await db.close_pool()
133
164
 
134
- # Asinxron loop ishga tushirish
135
165
  asyncio.run(main())
136
166
  ```
137
167
 
@@ -143,10 +173,12 @@ asyncio.run(main())
143
173
  **create(table, columns)** --- jadval yaratish, `columns` SQL
144
174
  sintaksisida.
145
175
 
146
- **drop(table)** --- jadvalni o'chirish.
176
+ **drop(table, cascade=False)** --- jadvalni o'chirish.
147
177
 
148
178
  **insert(table, columns, values)** --- ma'lumot qo'shish.
149
179
 
180
+ **insert_many(table, columns, values_list)** --- bir nechta qator qo‘shish
181
+
150
182
  **select(table, columns="\*", where=None, join=None, group_by=None,
151
183
  order_by=None, limit=None, fetchone=False)** --- ma'lumotlarni olish.
152
184
 
@@ -168,19 +200,14 @@ ma'lumotni yangilash.
168
200
 
169
201
  **delete(table, where_column, where_value)** --- ma'lumotni o'chirish.
170
202
 
171
- **manager(sql, params=None, commit=False, fetchall=False,
172
- fetchone=False)** --- barcha SQL amallarni bajaruvchi yagona metod.
173
-
174
203
  ## Qo‘shimcha
175
204
 
176
- `%s` bilan parametrizatsiya qilish xavfsiz va SQL injection'dan himoya qiladi.
205
+ `%s`,`$1` bilan parametrizatsiya qilish xavfsiz va SQL injection'dan himoya qiladi.
177
206
 
178
- `where` va `join` `list` yoki `tuple` yordamida murakkab so‘rovlar yozish mumkin.
207
+ `where` va `join` yordamida murakkab so‘rovlar yozish mumkin.
179
208
 
180
209
  `limit` va `order_by` parametrlaridan foydalanib ma'lumotlarni tartiblash va cheklash oson.
181
210
 
182
211
  `commit=True` bo‘lgan amallar darhol bazaga yoziladi, select() esa hech qachon o‘zgartirish kiritmaydi.
183
212
 
184
- `manager()` — barcha SQL buyruqlarini bajaruvchi yagona metod bo‘lib, kerak bo‘lganda to‘g‘ridan‑to‘g‘ri SQL yozish imkonini beradi.
185
-
186
- PostgreSQL bilan ishlash uchun `psycopg2` kutubxonasi talab qilinadi.
213
+ `raw()` — barcha SQL buyruqlarini bajaruvchi yagona metod bo‘lib, kerak bo‘lganda to‘g‘ridan‑to‘g‘ri SQL yozish imkonini beradi.
@@ -5,7 +5,7 @@ with open("README.md", "r", encoding="utf-8") as f:
5
5
 
6
6
  setup(
7
7
  name="postgresdb3",
8
- version="0.3.0",
8
+ version="0.3.2",
9
9
  packages=find_packages(),
10
10
  install_requires=[
11
11
  "psycopg2>=2.9",
File without changes
File without changes