Database Library — اردو/ڈیٹا_بیس
This library provides Urdu-keyword database clients for MySQL, PostgreSQL, MongoDB, Cassandra, Firebase/Firestore, and SQLite. All classes share a common base interface.
اردو: یہ لائبریری MySQL، PostgreSQL، MongoDB، Cassandra، Firebase/Firestore اور SQLite کے لیے اردو کلید الفاظ والے ڈیٹا بیس کلائنٹ فراہم کرتی ہے۔ تمام کلاسز ایک مشترکہ بنیادی انٹرفیس استعمال کرتی ہیں۔
Import:
Install dependencies (as needed):
pip install mysql-connector-python # مائی_ایس_کیو_ایل
pip install psycopg2-binary # پوسٹ_گریس
pip install pymongo # مونگو_ڈی_بی
pip install cassandra-driver # کسینڈرا
pip install firebase-admin # فائر_بیس (admin mode)
Table of Contents
- Common Interface
- MySQL (مائی_ایس_کیو_ایل)
- PostgreSQL (پوسٹ_گریس)
- MongoDB (مونگو_ڈی_بی)
- Cassandra (کسینڈرا)
- Firebase / Firestore (فائر_بیس)
- Transactions and Savepoints
- SQLite (ایس_کیو_لائٹ)
- Factory Function
Common Interface — مشترکہ انٹرفیس
All database classes (مائی_ایس_کیو_ایل, پوسٹ_گریس, ایس_کیو_لائٹ, مونگو_ڈی_بی, کسینڈرا) share the following methods:
اردو: تمام ڈیٹا بیس کلاسز یہ مشترکہ طریقے رکھتی ہیں:
جوڑیں()سے جڑنا،منقطع()سے قطع تعلق،سوال()سے SELECT چلانا،چلائیں()سے INSERT/UPDATE/DELETE اورلین_دین()سے محفوظ لین دین۔ سوال کے نتائجrow["کالم"]یاrow.کالمدونوں طریقوں سے دیکھے جا سکتے ہیں۔
| طریقہ | واپسی | تفصیل |
|---|---|---|
await db.جوڑیں() |
self | Open the connection |
await db.منقطع() |
— | Close the connection |
await db.سوال(query, params) |
list[dict] |
Execute SELECT; returns list of rows as dicts |
await db.چلائیں(query, params) |
int |
Execute INSERT/UPDATE/DELETE; returns rowcount |
await db.داخل(table, data_dict) |
int |
Insert helper: builds INSERT from a dict |
await db.لین_دین_شروع() |
— | BEGIN a transaction |
await db.کمٹ() |
— | COMMIT |
await db.واپسی() |
— | ROLLBACK |
await db.نقطہ_محفوظ(نام) |
— | SAVEPOINT name |
await db.نقطہ_واپسی(نام) |
— | ROLLBACK TO SAVEPOINT name |
await db.نقطہ_چھوڑیں(نام) |
— | RELEASE SAVEPOINT name |
await db.لین_دین(callback) |
— | Run async callback in a transaction; auto-commit or auto-rollback |
Row access: All query results return rows as _UrduObj instances, which support both dict-style (row["کالم"]) and dot-style (row.کالم) access.
Placeholders: Use ? in queries (automatically converted to %s for MySQL/PostgreSQL).
MySQL (مائی_ایس_کیو_ایل) — مائی SQL ڈیٹا بیس
Wraps mysql-connector-python with UTF-8 support and InnoDB transactions.
اردو: یہ
mysql-connector-pythonکا ریپر ہے جس میں UTF-8 سپورٹ اور InnoDB لین دین شامل ہیں۔ ترتیب میں میزبان، صارف، پاس ورڈ، پورٹ اور ڈیٹا بیس کا نام دیا جاتا ہے۔
Config keys:
| کلید | پہلے سے | تفصیل |
|---|---|---|
میزبان |
"localhost" |
MySQL host |
صارف |
"root" |
Username |
پاس_ورڈ |
"" |
Password |
پورٹ |
3306 |
Port |
ڈیٹا_بیس |
(none) | Database name |
MySQL Example: Full CRUD with Transactions — مکمل CRUD مثال
اردو: یہ مثال MySQL میں مکمل CRUD عمل دکھاتی ہے: جدول بنانا، ڈیٹا داخل کرنا (
INSERT)، ڈیٹا پڑھنا (SELECT)، ڈیٹا تازہ کرنا (UPDATE)، ڈیٹا حذف کرنا (DELETE) اور محفوظ لین دین۔
درآمد { مائی_ایس_کیو_ایل } سے "اردو/ڈیٹا_بیس";
غیر_متزامن فنکشن مرکز() {
متغیر db = نیا مائی_ایس_کیو_ایل({
"میزبان": "localhost",
"صارف": "root",
"پاس_ورڈ": "پاس_ورڈ",
"پورٹ": 3306
});
// ─── جڑنا ─────────────────────────────────────────
انتظار db.جوڑیں();
لکھو("MySQL سے جڑ گئے");
// ─── ڈیٹا بیس اور جدول ──────────────────────────
انتظار db.چلائیں("CREATE DATABASE IF NOT EXISTS urdu_test CHARACTER SET utf8mb4");
انتظار db.چلائیں("USE urdu_test");
انتظار db.چلائیں("DROP TABLE IF EXISTS طلباء");
انتظار db.چلائیں(`
CREATE TABLE طلباء (
شناخت INT AUTO_INCREMENT PRIMARY KEY,
نام VARCHAR(100) NOT NULL,
عمر INT,
شہر VARCHAR(50)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
`);
لکھو("جدول بنایا گیا");
// ─── INSERT ───────────────────────────────────────
انتظار db.چلائیں(
"INSERT INTO طلباء (نام, عمر, شہر) VALUES (?, ?, ?)",
["احمد", 20, "کراچی"]
);
انتظار db.چلائیں(
"INSERT INTO طلباء (نام, عمر, شہر) VALUES (?, ?, ?)",
["فاطمہ", 22, "لاہور"]
);
// داخل() مددگار
انتظار db.داخل("طلباء", { "نام": "علی", "عمر": 19, "شہر": "اسلام آباد" });
لکھو("3 طلباء داخل کیے");
// ─── SELECT ───────────────────────────────────────
متغیر سب = انتظار db.سوال("SELECT * FROM طلباء ORDER BY شناخت");
لکھو(`\nکل طلباء: ${لمبائی(سب)}`);
کے_لیے (متغیر ط کا سب) {
لکھو(` ${ط["نام"]} — ${ط["شہر"]} (${ط["عمر"]})`);
}
// ─── WHERE فلٹر ───────────────────────────────────
متغیر کراچی = انتظار db.سوال(
"SELECT نام, عمر FROM طلباء WHERE شہر = ?", ["کراچی"]
);
لکھو(`\nکراچی کے طلباء: ${لمبائی(کراچی)}`);
// ─── UPDATE ───────────────────────────────────────
انتظار db.چلائیں(
"UPDATE طلباء SET عمر = ? WHERE نام = ?", [21, "احمد"]
);
متغیر تازہ = انتظار db.سوال(
"SELECT عمر FROM طلباء WHERE نام = ?", ["احمد"]
);
لکھو(`\nahmad کی نئی عمر: ${تازہ[0]["عمر"]}`);
// ─── DELETE ───────────────────────────────────────
انتظار db.چلائیں("DELETE FROM طلباء WHERE نام = ?", ["علی"]);
متغیر بعد = انتظار db.سوال("SELECT COUNT(*) AS تعداد FROM طلباء");
لکھو(`\nحذف کے بعد: ${بعد[0]["تعداد"]} طلباء`);
// ─── Aggregate ────────────────────────────────────
متغیر اعداد = انتظار db.سوال(
"SELECT AVG(عمر) AS اوسط, MAX(عمر) AS زیادہ, MIN(عمر) AS کم FROM طلباء"
);
لکھو(`\nاوسط عمر: ${اعداد[0]["اوسط"]}`);
// ─── Transaction ──────────────────────────────────
انتظار db.لین_دین_شروع();
کوشش {
انتظار db.چلائیں(
"INSERT INTO طلباء (نام, عمر, شہر) VALUES (?, ?, ?)",
["زینب", 24, "ملتان"]
);
انتظار db.کمٹ();
لکھو("\nTransaction COMMIT کامیاب");
} پکڑو (غ) {
انتظار db.واپسی();
لکھو(`Transaction ROLLBACK: ${غ}`);
}
// ─── لین_دین() wrapper ────────────────────────────
انتظار db.لین_دین(غیر_متزامن فنکشن() {
انتظار db.چلائیں(
"INSERT INTO طلباء (نام, عمر, شہر) VALUES (?, ?, ?)",
["عمر", 26, "پشاور"]
);
});
لکھو("لین_دین() COMMIT");
// ─── صفائی ────────────────────────────────────────
انتظار db.چلائیں("DROP TABLE IF EXISTS طلباء");
انتظار db.چلائیں("DROP DATABASE IF EXISTS urdu_test");
انتظار db.منقطع();
لکھو("\nMySQL منقطع");
}
انتظار مرکز();
PostgreSQL (پوسٹ_گریس) — پوسٹ گریس ڈیٹا بیس
Wraps psycopg2 with RealDictCursor for named-column access.
اردو: یہ
psycopg2کا ریپر ہے جس میںRealDictCursorسے نامی کالم تک رسائی ملتی ہے۔ نتائجrow.کالم(نقطہ طرز) سے پڑھے جا سکتے ہیں۔ اس میںآخری_شناخت()طریقہ بھی ہے جو آخری داخل کردہ قطار کی شناخت واپس کرتا ہے۔
Config keys:
| کلید | پہلے سے | تفصیل |
|---|---|---|
میزبان |
"localhost" |
PostgreSQL host |
صارف |
"postgres" |
Username |
پاس_ورڈ |
"" |
Password |
پورٹ |
5432 |
Port |
ڈیٹا_بیس |
"postgres" |
Database name |
Additional method: await db.آخری_شناخت(table, column) returns the last inserted serial ID via currval.
PostgreSQL Example: Full CRUD
درآمد { پوسٹ_گریس } سے "اردو/ڈیٹا_بیس";
غیر_متزامن فنکشن مرکز() {
متغیر db = نیا پوسٹ_گریس({
"میزبان": "localhost",
"صارف": "postgres",
"پاس_ورڈ": "پاس_ورڈ",
"ڈیٹا_بیس": "postgres",
"پورٹ": 5432
});
انتظار db.جوڑیں();
لکھو("PostgreSQL سے جڑ گئے");
// ─── جدول بنائیں ─────────────────────────────────
انتظار db.چلائیں("DROP TABLE IF EXISTS ملازمین");
انتظار db.چلائیں(`
CREATE TABLE ملازمین (
شناخت SERIAL PRIMARY KEY,
نام VARCHAR(100) NOT NULL,
تنخواہ NUMERIC(10,2),
شعبہ VARCHAR(50)
)
`);
// ─── INSERT ───────────────────────────────────────
انتظار db.داخل("ملازمین", {
"نام": "احمد خان", "تنخواہ": 75000, "شعبہ": "انجینئرنگ"
});
انتظار db.داخل("ملازمین", {
"نام": "فاطمہ رضا", "تنخواہ": 85000, "شعبہ": "مارکیٹنگ"
});
انتظار db.داخل("ملازمین", {
"نام": "علی حسن", "تنخواہ": 65000, "شعبہ": "انجینئرنگ"
});
لکھو("3 ملازم داخل کیے");
// ─── SELECT ───────────────────────────────────────
متغیر سب = انتظار db.سوال("SELECT * FROM ملازمین ORDER BY شناخت");
لکھو(`\nکل ملازمین: ${لمبائی(سب)}`);
کے_لیے (متغیر م کا سب) {
لکھو(` ${م.نام} | ${م.شعبہ} | Rs ${م.تنخواہ}`);
}
// ─── فلٹر + ترتیب ─────────────────────────────────
متغیر انجینئر = انتظار db.سوال(
"SELECT * FROM ملازمین WHERE شعبہ = ? ORDER BY تنخواہ DESC",
["انجینئرنگ"]
);
لکھو(`\nانجینئرنگ شعبہ: ${لمبائی(انجینئر)} ملازم`);
// ─── Aggregate ────────────────────────────────────
متغیر اعداد = انتظار db.سوال(
"SELECT AVG(تنخواہ) AS اوسط, MAX(تنخواہ) AS زیادہ FROM ملازمین"
);
لکھو(`\nاوسط تنخواہ: ${اعداد[0]["اوسط"]}`);
لکھو(`زیادہ تنخواہ: ${اعداد[0]["زیادہ"]}`);
// ─── UPDATE ───────────────────────────────────────
انتظار db.چلائیں(
"UPDATE ملازمین SET تنخواہ = تنخواہ * 1.10 WHERE شعبہ = ?",
["انجینئرنگ"]
);
لکھو("\nانجینئرنگ کو 10% اضافہ ملا");
// ─── DELETE ───────────────────────────────────────
متغیر حذف_شدہ = انتظار db.چلائیں(
"DELETE FROM ملازمین WHERE تنخواہ < ?", [70000]
);
لکھو(`\n${حذف_شدہ} ملازم حذف کیے (کم تنخواہ)`);
// ─── Transaction ──────────────────────────────────
انتظار db.لین_دین(غیر_متزامن فنکشن() {
انتظار db.چلائیں(
"INSERT INTO ملازمین (نام, تنخواہ, شعبہ) VALUES (?, ?, ?)",
["نیا_ملازم", 90000, "IT"]
);
انتظار db.چلائیں(
"UPDATE ملازمین SET تنخواہ = تنخواہ + 5000 WHERE شعبہ = ?",
["IT"]
);
});
لکھو("Transaction COMMIT");
// ─── صفائی ────────────────────────────────────────
انتظار db.چلائیں("DROP TABLE IF EXISTS ملازمین");
انتظار db.منقطع();
لکھو("\nPostgreSQL منقطع");
}
انتظار مرکز();
MongoDB (مونگو_ڈی_بی) — مونگو ڈی بی
Wraps pymongo with collection-based access.
اردو: یہ
pymongoکا ریپر ہے جس میں مجموعہ (collection) پر مبنی رسائی ملتی ہے۔ MongoDB ایک NoSQL ڈیٹا بیس ہے جو JSON جیسی دستاویزات (documents) محفوظ کرتا ہے۔ جدول کی بجائے مجموعہ اور قطار کی بجائے دستاویز استعمال ہوتی ہے۔
Config keys:
| کلید | پہلے سے | تفصیل |
|---|---|---|
میزبان |
"localhost" |
MongoDB host |
پورٹ |
27017 |
Port |
ڈیٹا_بیس |
"test" |
Database name |
uri |
(none) | Full connection string (overrides host/port) |
After connecting, get a collection handle with db.مجموعہ("نام").
اردو: جڑنے کے بعد
db.مجموعہ("نام")سے مجموعہ کا ہینڈل حاصل کریں۔ مجموعہ طریقے تلاش، ایک تلاش، داخل، بہت داخل، تازہ کاری، حذف اور گنتی کی سہولت دیتے ہیں۔
Collection methods:
| طریقہ | واپسی | تفصیل |
|---|---|---|
await col.تلاش(filter, opts, حد=n) |
list[dict] |
Find documents |
await col.ایک_تلاش(filter) |
dict or None |
Find one document |
await col.داخل(document) |
str |
Insert one; returns inserted _id |
await col.بہت_داخل(documents) |
list[str] |
Insert many; returns list of _ids |
await col.تازہ_کاری(filter, update) |
int |
Update many with $set; returns modified count |
await col.حذف(filter) |
int |
Delete many; returns deleted count |
await col.گنتی(filter) |
int |
Count matching documents |
MongoDB Example: Full CRUD
درآمد { مونگو_ڈی_بی } سے "اردو/ڈیٹا_بیس";
غیر_متزامن فنکشن مرکز() {
متغیر mongo = نیا مونگو_ڈی_بی({
"میزبان": "localhost",
"پورٹ": 27017,
"ڈیٹا_بیس": "urdu_test"
});
انتظار mongo.جوڑیں();
لکھو("MongoDB سے جڑ گئے");
متغیر کتابیں = mongo.مجموعہ("کتابیں");
// ─── پرانا ڈیٹا صاف کریں ──────────────────────────
انتظار کتابیں.حذف({});
// ─── ایک دستاویز داخل ────────────────────────────
متغیر نئی_id = انتظار کتابیں.داخل({
"عنوان": "آگ کا دریا",
"مصنف": "قرة العین حیدر",
"صنف": "ناول",
"سال": 1959,
"قیمت": 1200
});
لکھو(`نئی کتاب ID: ${نئی_id}`);
// ─── بہت دستاویز داخل ────────────────────────────
متغیر ids = انتظار کتابیں.بہت_داخل([
{ "عنوان": "گلستان سعدی", "مصنف": "سعدی شیرازی", "صنف": "شاعری", "سال": 1258, "قیمت": 850 },
{ "عنوان": "اداس نسلیں", "مصنف": "عبداللہ حسین", "صنف": "ناول", "سال": 1963, "قیمت": 980 },
{ "عنوان": "فیض کا کلام", "مصنف": "فیض احمد فیض", "صنف": "شاعری", "سال": 1941, "قیمت": 650 }
]);
لکھو(`${لمبائی(ids)} کتابیں داخل`);
// ─── تمام تلاش ────────────────────────────────────
متغیر سب = انتظار کتابیں.تلاش({});
لکھو(`\nکل کتابیں: ${لمبائی(سب)}`);
کے_لیے (متغیر ک کا سب) {
لکھو(` ${ک["عنوان"]} — ${ک["مصنف"]}`);
}
// ─── فلٹر ─────────────────────────────────────────
متغیر شاعری = انتظار کتابیں.تلاش({ "صنف": "شاعری" });
لکھو(`\nشاعری کتابیں: ${لمبائی(شاعری)}`);
// ─── ایک تلاش ─────────────────────────────────────
متغیر ایک = انتظار کتابیں.ایک_تلاش({ "عنوان": "آگ کا دریا" });
اگر (ایک) {
لکھو(`\nملی: ${ایک["عنوان"]} (${ایک["سال"]})`);
}
// ─── MongoDB Query Operators ───────────────────────
// قیمت 900 سے زیادہ
متغیر مہنگی = انتظار کتابیں.تلاش({ "قیمت": { "$gt": 900 } });
لکھو(`\n900 سے مہنگی: ${لمبائی(مہنگی)}`);
// حد کے ساتھ
متغیر پہلی_2 = انتظار کتابیں.تلاش({}, {}, حد=2);
لکھو(`\nپہلی 2 کتابیں:`);
کے_لیے (متغیر ک کا پہلی_2) {
لکھو(` ${ک["عنوان"]}`);
}
// ─── تازہ کاری ────────────────────────────────────
متغیر تازہ = انتظار کتابیں.تازہ_کاری(
{ "صنف": "شاعری" },
{ "دستیاب": سچ }
);
لکھو(`\n${تازہ} شاعری کتابیں تازہ کی گئیں`);
// ─── گنتی ─────────────────────────────────────────
متغیر کل = انتظار کتابیں.گنتی({});
متغیر ناول = انتظار کتابیں.گنتی({ "صنف": "ناول" });
لکھو(`\nکل: ${کل} | ناول: ${ناول}`);
// ─── حذف ──────────────────────────────────────────
متغیر حذف = انتظار کتابیں.حذف({ "قیمت": { "$lt": 700 } });
لکھو(`\n${حذف} سستی کتابیں حذف`);
// ─── منقطع ────────────────────────────────────────
انتظار mongo.منقطع();
لکھو("MongoDB منقطع");
}
انتظار مرکز();
MongoDB: Connection String
درآمد { مونگو_ڈی_بی } سے "اردو/ڈیٹا_بیس";
// Atlas یا تصدیق والا کنکشن
متغیر mongo = نیا مونگو_ڈی_بی({
"uri": "mongodb+srv://صارف:پاس@cluster0.abc.mongodb.net",
"ڈیٹا_بیس": "میری_ایپ"
});
غیر_متزامن فنکشن مرکز() {
انتظار mongo.جوڑیں();
متغیر صارفین = mongo.مجموعہ("صارفین");
متغیر گنتی = انتظار صارفین.گنتی({});
لکھو(`صارفین: ${گنتی}`);
انتظار mongo.منقطع();
}
انتظار مرکز();
Cassandra (کسینڈرا) — کسینڈرا ڈیٹا بیس
Wraps cassandra-driver for Apache Cassandra and DataStax Astra.
اردو: یہ Apache Cassandra اور DataStax Astra کے لیے
cassandra-driverکا ریپر ہے۔ Cassandra ایک تقسیم شدہ NoSQL ڈیٹا بیس ہے جو بڑے پیمانے پر ڈیٹا کے لیے موزوں ہے اور کثیر نوڈ کلسٹروں میں چلتا ہے۔
Important: Cassandra CQL requires ASCII identifiers for table and column names. Use ASCII names in CREATE TABLE and queries. Urdu names can be used as variable names in your code.
Config keys:
| کلید | پہلے سے | تفصیل |
|---|---|---|
میزبان |
["localhost"] |
List of host addresses (or single string) |
پورٹ |
9042 |
Port |
صارف |
(none) | Username (optional) |
پاس_ورڈ |
(none) | Password (optional) |
کی_اسپیس |
"" |
Initial keyspace (optional) |
DDL Methods:
| طریقہ | تفصیل |
|---|---|
await db.کی_اسپیس_بنائیں(نام, حکمت, نقلیں) |
Create keyspace if not exists |
await db.کی_اسپیس_چنو(نام) |
Switch to keyspace |
await db.جدول_بنائیں(نام, {col: type}) |
CREATE TABLE IF NOT EXISTS |
await db.جدول_مٹائیں(نام) |
DROP TABLE IF EXISTS |
await db.کی_اسپیس_مٹائیں(نام) |
DROP KEYSPACE IF EXISTS |
Prepared Statements:
| طریقہ | تفصیل |
|---|---|
db.تیار(query) |
Prepare a CQL statement (synchronous) |
await db.تیار_چلائیں(stmt, params) |
Execute prepared statement |
await db.تیار_سوال(stmt, params) |
Execute prepared SELECT, returns rows |
await db.بیچ(list) |
Execute a LOGGED BATCH of (query, params) pairs |
Cassandra Example: Full CRUD
درآمد { کسینڈرا } سے "اردو/ڈیٹا_بیس";
غیر_متزامن فنکشن مرکز() {
متغیر db = نیا کسینڈرا({
"میزبان": ["localhost"],
"پورٹ": 9042
});
// ─── جڑنا ────────────────────────────────────────
انتظار db.جوڑیں();
لکھو("Cassandra سے جڑ گئے");
// ─── کی_اسپیس بنائیں ─────────────────────────────
انتظار db.کی_اسپیس_بنائیں("urdu_ks", "SimpleStrategy", 1);
انتظار db.کی_اسپیس_چنو("urdu_ks");
لکھو("کی_اسپیس تیار");
// ─── جدول بنائیں (ASCII نام ضروری) ──────────────
انتظار db.چلائیں("DROP TABLE IF EXISTS students");
انتظار db.جدول_بنائیں("students", {
"id": "UUID PRIMARY KEY",
"naam": "TEXT",
"umar": "INT",
"shehar": "TEXT",
"number": "FLOAT"
});
لکھو("جدول students بنا");
// ─── INSERT ───────────────────────────────────────
انتظار db.چلائیں(
"INSERT INTO students (id, naam, umar, shehar, number) VALUES (uuid(), 'Ahmad', 20, 'Karachi', 88.5)"
);
انتظار db.چلائیں(
"INSERT INTO students (id, naam, umar, shehar, number) VALUES (uuid(), 'Fatima', 22, 'Lahore', 91.0)"
);
لکھو("طلباء داخل کیے");
// ─── SELECT ───────────────────────────────────────
متغیر سب = انتظار db.سوال("SELECT naam, umar, shehar, number FROM students");
لکھو(`\nکل طلباء: ${لمبائی(سب)}`);
کے_لیے (متغیر ط کا سب) {
لکھو(` ${ط["naam"]} — ${ط["shehar"]} — ${ط["number"]}`);
}
// ─── COUNT ────────────────────────────────────────
متغیر گنتی = انتظار db.سوال("SELECT COUNT(*) FROM students");
لکھو(`\nتعداد: ${گنتی[0]["count"]}`);
// ─── تیار بیان ────────────────────────────────────
متغیر داخل_تیار = db.تیار(
"INSERT INTO students (id, naam, umar, shehar, number) VALUES (uuid(), ?, ?, ?, ?)"
);
انتظار db.تیار_چلائیں(داخل_تیار, ["Zainab", 21, "Multan", 83.0]);
انتظار db.تیار_چلائیں(داخل_تیار, ["Umar", 23, "Peshawar", 79.5]);
لکھو("\nتیار بیان سے 2 مزید داخل");
// ─── SELECT تیار بیان ─────────────────────────────
متغیر منتخب_تیار = db.تیار("SELECT naam, number FROM students WHERE naam = ? ALLOW FILTERING");
متغیر نتیجہ = انتظار db.تیار_سوال(منتخب_تیار, ["Ahmad"]);
اگر (لمبائی(نتیجہ) > 0) {
لکھو(`\nاحمد کا نمبر: ${نتیجہ[0]["number"]}`);
}
// ─── BATCH ────────────────────────────────────────
انتظار db.چلائیں("DROP TABLE IF EXISTS masnoaat");
انتظار db.جدول_بنائیں("masnoaat", {
"id": "UUID PRIMARY KEY",
"naam": "TEXT",
"qeemat": "DECIMAL"
});
متغیر م_تیار = db.تیار(
"INSERT INTO masnoaat (id, naam, qeemat) VALUES (uuid(), ?, ?)"
);
انتظار db.بیچ([
[م_تیار, ["Kitab", 250]],
[م_تیار, ["Qalam", 50]],
[م_تیار, ["Bag", 800]]
]);
متغیر مصنوعات = انتظار db.سوال("SELECT COUNT(*) FROM masnoaat");
لکھو(`\nBATCH: ${مصنوعات[0]["count"]} مصنوعات`);
// ─── TTL ──────────────────────────────────────────
انتظار db.چلائیں("DROP TABLE IF EXISTS aarzi");
انتظار db.جدول_بنائیں("aarzi", {
"id": "UUID PRIMARY KEY",
"paigham": "TEXT"
});
// 1 گھنٹے بعد خودبخود ختم
انتظار db.چلائیں(
"INSERT INTO aarzi (id, paigham) VALUES (uuid(), 'عارضی پیغام') USING TTL 3600"
);
لکھو("\nTTL اندراج کامیاب");
// ─── UPDATE ───────────────────────────────────────
// Cassandra میں UPDATE کے لیے PRIMARY KEY ضروری ہے
متغیر قطاریں = انتظار db.سوال("SELECT id, naam FROM students");
کے_لیے (متغیر ق کا قطاریں) {
اگر (ق["naam"] == "Ahmad") {
انتظار db.چلائیں(`UPDATE students SET number = 95.0 WHERE id = ${ق["id"]}`);
لکھو(`\nahmad کا نمبر 95.0 کیا گیا`);
}
}
// ─── صفائی ────────────────────────────────────────
انتظار db.جدول_مٹائیں("students");
انتظار db.جدول_مٹائیں("masnoaat");
انتظار db.جدول_مٹائیں("aarzi");
انتظار db.کی_اسپیس_مٹائیں("urdu_ks");
انتظار db.منقطع();
لکھو("\nCassandra منقطع");
}
انتظار مرکز();
Cassandra: Authentication and Multiple Nodes
درآمد { کسینڈرا } سے "اردو/ڈیٹا_بیس";
// کثیر نوڈ کلسٹر + تصدیق
متغیر db = نیا کسینڈرا({
"میزبان": ["node1.example.com", "node2.example.com", "node3.example.com"],
"پورٹ": 9042,
"صارف": "cassandra",
"پاس_ورڈ": "cassandra",
"کی_اسپیس": "production_ks"
});
غیر_متزامن فنکشن مرکز() {
انتظار db.جوڑیں();
لکھو("کلسٹر سے جڑ گئے");
متغیر نتیجہ = انتظار db.سوال("SELECT cluster_name FROM system.local");
لکھو(`کلسٹر: ${نتیجہ[0]["cluster_name"]}`);
انتظار db.منقطع();
}
انتظار مرکز();
Firebase / Firestore (فائر_بیس) — فائر بیس
Supports two modes: admin (server-side with service account) and web (client-side with API key).
اردو: Firebase دو طریقوں میں کام کرتا ہے: admin (سرور کی طرف، سروس اکاؤنٹ JSON فائل سے) اور web (کلائنٹ کی طرف، API کلید سے)۔ یہ Firestore دستاویز ڈیٹا بیس اور Realtime Database دونوں کی سہولت دیتا ہے۔
Admin Mode
درآمد { فائر_بیس } سے "اردو/ڈیٹا_بیس";
// service account JSON فائل سے
متغیر fb = نیا فائر_بیس({
"اسناد": "serviceAccountKey.json",
"منصوبہ": "میرا-پروجیکٹ",
"databaseURL": "https://میرا-پروجیکٹ-default-rtdb.firebaseio.com"
});
غیر_متزامن فنکشن مرکز() {
انتظار fb.جوڑیں();
// Firestore
متغیر صارفین = fb.مجموعہ("صارفین");
متغیر id = انتظار صارفین.اضافہ({ "نام": "احمد", "ای_میل": "ahmed@test.com" });
لکھو(`دستاویز ID: ${id}`);
متغیر دستاویز = انتظار صارفین.حاصل(id);
لکھو(`نام: ${دستاویز["نام"]}`);
// Realtime Database
انتظار fb.ریئل_لکھو("/حالت", { "آن_لائن": سچ });
متغیر حالت = انتظار fb.ریئل_پڑھو("/حالت");
لکھو(`آن_لائن: ${حالت["آن_لائن"]}`);
انتظار fb.منقطع();
}
انتظار مرکز();
Web Mode (API Key)
درآمد { فائر_بیس } سے "اردو/ڈیٹا_بیس";
متغیر fb = نیا فائر_بیس({
"apiKey": "AIzaSy...",
"projectId": "میرا-پروجیکٹ"
});
غیر_متزامن فنکشن مرکز() {
// ای میل سے سائن ان
انتظار fb.ای_میل_داخل("صارف@مثال.com", "پاس_ورڈ");
// Firestore
متغیر نوٹس = fb.مجموعہ("نوٹس");
متغیر id = انتظار نوٹس.اضافہ({ "عنوان": "پہلا نوٹ", "مواد": "..." });
متغیر تمام = انتظار نوٹس.سبھی();
کے_لیے (متغیر ن کا تمام) {
لکھو(`${ن["id"]}: ${ن["عنوان"]}`);
}
انتظار نوٹس.حذف(id);
انتظار fb.منقطع();
}
انتظار مرکز();
Firestore Collection Methods:
| طریقہ | تفصیل |
|---|---|
await col.اضافہ(data) |
Add document with auto-ID; returns ID string |
await col.مقرر(id, data) |
Set/overwrite document by ID |
await col.حاصل(id) |
Get document by ID; returns dict or None |
await col.سبھی() |
Get all documents in collection |
await col.حذف(id) |
Delete document by ID |
Transactions and Savepoints — لین دین اور محفوظ نقطے
Basic Transaction Pattern — بنیادی لین دین نمونہ
اردو: لین دین (transaction) ایک یا زیادہ ڈیٹا بیس عمل کو اکٹھے محفوظ (COMMIT) یا رد (ROLLBACK) کرنے کا طریقہ ہے۔ اگر کوئی ایک عمل ناکام ہو تو پورا لین دین واپس ہو جاتا ہے — اس سے ڈیٹا ہمیشہ درست رہتا ہے۔
درآمد { مائی_ایس_کیو_ایل } سے "اردو/ڈیٹا_بیس";
غیر_متزامن فنکشن منتقلی_کرو(db, از_کھاتہ, بہ_کھاتہ, رقم) {
// طریقہ 1: دستی BEGIN/COMMIT/ROLLBACK
انتظار db.لین_دین_شروع();
کوشش {
انتظار db.چلائیں(
"UPDATE کھاتے SET بقیہ = بقیہ - ? WHERE نام = ?",
[رقم, از_کھاتہ]
);
انتظار db.چلائیں(
"UPDATE کھاتے SET بقیہ = بقیہ + ? WHERE نام = ?",
[رقم, بہ_کھاتہ]
);
انتظار db.کمٹ();
لکھو("منتقلی کامیاب");
} پکڑو (غ) {
انتظار db.واپسی();
لکھو(`منتقلی ناکام: ${غ}`);
پھینکو غ;
}
}
غیر_متزامن فنکشن مرکز() {
متغیر db = نیا مائی_ایس_کیو_ایل({
"میزبان": "localhost", "صارف": "root", "پاس_ورڈ": ""
});
انتظار db.جوڑیں();
انتظار db.چلائیں("CREATE DATABASE IF NOT EXISTS بینک");
انتظار db.چلائیں("USE بینک");
انتظار db.چلائیں(`CREATE TABLE IF NOT EXISTS کھاتے (
نام VARCHAR(50) PRIMARY KEY, بقیہ DECIMAL(10,2)
)`);
انتظار db.چلائیں("INSERT IGNORE INTO کھاتے VALUES ('احمد', 10000), ('فاطمہ', 5000)");
// طریقہ 1: دستی
انتظار منتقلی_کرو(db, "احمد", "فاطمہ", 2000);
// طریقہ 2: لین_دین() wrapper (خودکار)
انتظار db.لین_دین(غیر_متزامن فنکشن() {
انتظار db.چلائیں(
"UPDATE کھاتے SET بقیہ = بقیہ + ? WHERE نام = ?", [500, "احمد"]
);
انتظار db.چلائیں(
"UPDATE کھاتے SET بقیہ = بقیہ - ? WHERE نام = ?", [500, "فاطمہ"]
);
});
لکھو("لین_دین() COMMIT کامیاب");
// طریقہ 3: غلطی پر خودکار ROLLBACK
کوشش {
انتظار db.لین_دین(غیر_متزامن فنکشن() {
انتظار db.چلائیں(
"UPDATE کھاتے SET بقیہ = بقیہ - ? WHERE نام = ?", [999999, "احمد"]
);
پھینکو نیا غلطی("بقیہ ناکافی!");
});
} پکڑو (غ) {
لکھو(`خودکار ROLLBACK: ${غ}`);
}
انتظار db.چلائیں("DROP TABLE کھاتے");
انتظار db.چلائیں("DROP DATABASE بینک");
انتظار db.منقطع();
}
انتظار مرکز();
Savepoints Example — محفوظ نقطے مثال
Savepoints allow partial rollback within a transaction.
اردو: محفوظ نقطے (savepoints) لین دین کے اندر جزوی واپسی کی اجازت دیتے ہیں۔ آپ ایک خاص مقام محفوظ کریں، پھر اگر آگے کا کام ناکام ہو تو اسی مقام تک واپس جائیں — پچھلا کام محفوظ رہتا ہے۔
درآمد { پوسٹ_گریس } سے "اردو/ڈیٹا_بیس";
غیر_متزامن فنکشن مرکز() {
متغیر db = نیا پوسٹ_گریس({
"میزبان": "localhost", "صارف": "postgres",
"پاس_ورڈ": "پاس_ورڈ", "ڈیٹا_بیس": "postgres"
});
انتظار db.جوڑیں();
انتظار db.چلائیں("DROP TABLE IF EXISTS سپ_جانچ");
انتظار db.چلائیں(`CREATE TABLE سپ_جانچ (
شناخت SERIAL PRIMARY KEY, قدر INT
)`);
// ─── SAVEPOINT استعمال ────────────────────────────
انتظار db.لین_دین_شروع();
انتظار db.چلائیں("INSERT INTO سپ_جانچ (قدر) VALUES (?)", [100]);
انتظار db.نقطہ_محفوظ("نقطہ_الف"); // ← یہاں محفوظ
انتظار db.چلائیں("INSERT INTO سپ_جانچ (قدر) VALUES (?)", [200]);
انتظار db.نقطہ_محفوظ("نقطہ_ب"); // ← دوسرا نقطہ
انتظار db.چلائیں("INSERT INTO سپ_جانچ (قدر) VALUES (?)", [999]); // غلطی
متغیر بعد_غلطی = انتظار db.سوال("SELECT COUNT(*) AS n FROM سپ_جانچ");
لکھو(`غلطی سے پہلے: ${بعد_غلطی[0]["n"]} قطاریں`);
// نقطہ_ب پر واپس — 999 والی قطار ختم
انتظار db.نقطہ_واپسی("نقطہ_ب");
متغیر بعد_واپسی = انتظار db.سوال("SELECT COUNT(*) AS n FROM سپ_جانچ");
لکھو(`نقطہ_ب واپسی: ${بعد_واپسی[0]["n"]} قطاریں`);
انتظار db.نقطہ_چھوڑیں("نقطہ_ب"); // نقطہ_ب ریلیز
انتظار db.کمٹ(); // نقطہ_الف تک محفوظ
متغیر آخری = انتظار db.سوال("SELECT * FROM سپ_جانچ ORDER BY شناخت");
لکھو(`\nآخری نتیجہ (${لمبائی(آخری)} قطاریں):`);
کے_لیے (متغیر ق کا آخری) {
لکھو(` قدر: ${ق["قدر"]}`);
}
// صرف 100 اور 200 ہونے چاہئیں
انتظار db.چلائیں("DROP TABLE سپ_جانچ");
انتظار db.منقطع();
لکھو("\nSavepoint مثال مکمل");
}
انتظار مرکز();
Savepoint workflow — محفوظ نقطہ کا طریقہ کار:
اردو: محفوظ نقطہ کا طریقہ کار: لین دین شروع کریں ← کام کریں ← نقطہ محفوظ کریں ← مزید کام کریں ← اگر ناکام ہو تو نقطے پر واپس جائیں ← نقطہ چھوڑیں ← کمٹ کریں۔
await db.لین_دین_شروع()— begin transaction- Do some work
await db.نقطہ_محفوظ("نام")— save a checkpoint- Do more work (that might fail)
await db.نقطہ_واپسی("نام")— undo back to the checkpointawait db.نقطہ_چھوڑیں("نام")— release the savepointawait db.کمٹ()— commit everything up to the savepoints that were kept
SQLite (ایس_کیو_لائٹ) — ایس کیو لائٹ ڈیٹا بیس
SQLite is built into Python and requires no additional installation.
اردو: SQLite Python میں بنا ہوا ہے اور اضافی نصب کاری کی ضرورت نہیں۔ یہ ایک فائل پر مبنی ڈیٹا بیس ہے جو چھوٹی ایپلیکیشنز، جانچ اور سیکھنے کے لیے بہترین ہے۔
:memory:سے میموری میں عارضی ڈیٹا بیس بھی بنایا جا سکتا ہے۔
Import:
Constructor:
// فائل میں
متغیر db = نیا ایس_کیو_لائٹ("میرا_ڈیٹا.db");
// یا ترتیب dict سے
متغیر db = نیا ایس_کیو_لائٹ({ "فائل": "میرا_ڈیٹا.db" });
// میموری میں (جانچ کے لیے)
متغیر db = نیا ایس_کیو_لائٹ(":memory:");
SQLite supports all common interface methods plus await db.جدول_بنائیں(نام, {col: type}).
SQLite Example: Quick Start
درآمد { ایس_کیو_لائٹ } سے "اردو/ڈیٹا_بیس";
غیر_متزامن فنکشن مرکز() {
متغیر db = نیا ایس_کیو_لائٹ(":memory:");
انتظار db.جوڑیں();
// جدول بنائیں
انتظار db.جدول_بنائیں("اشیاء", {
"شناخت": "INTEGER PRIMARY KEY AUTOINCREMENT",
"نام": "TEXT NOT NULL",
"قیمت": "REAL DEFAULT 0"
});
// داخل
انتظار db.داخل("اشیاء", { "نام": "کتاب", "قیمت": 500.0 });
انتظار db.داخل("اشیاء", { "نام": "قلم", "قیمت": 50.0 });
انتظار db.داخل("اشیاء", { "نام": "کاغذ", "قیمت": 20.0 });
// تلاش
متغیر سب = انتظار db.سوال("SELECT * FROM اشیاء ORDER BY قیمت DESC");
کے_لیے (متغیر ش کا سب) {
لکھو(`${ش["نام"]}: Rs ${ش["قیمت"]}`);
}
// Transaction
انتظار db.لین_دین(غیر_متزامن فنکشن() {
انتظار db.چلائیں("UPDATE اشیاء SET قیمت = قیمت * 1.1");
});
لکھو("\n10% قیمت اضافہ کامیاب");
انتظار db.منقطع();
}
انتظار مرکز();
SQLite Example: Savepoints
درآمد { ایس_کیو_لائٹ } سے "اردو/ڈیٹا_بیس";
غیر_متزامن فنکشن مرکز() {
متغیر db = نیا ایس_کیو_لائٹ(":memory:");
انتظار db.جوڑیں();
انتظار db.چلائیں(`CREATE TABLE کھاتے (
شناخت INTEGER PRIMARY KEY AUTOINCREMENT,
نام TEXT NOT NULL,
بقیہ REAL DEFAULT 0
)`);
انتظار db.چلائیں("INSERT INTO کھاتے (نام, بقیہ) VALUES (?, ?)", ["احمد", 10000]);
انتظار db.چلائیں("INSERT INTO کھاتے (نام, بقیہ) VALUES (?, ?)", ["فاطمہ", 5000]);
// SAVEPOINT مثال
انتظار db.لین_دین_شروع();
// پہلا آپریشن
انتظار db.چلائیں(
"UPDATE کھاتے SET بقیہ = بقیہ - ? WHERE نام = ?", [2000, "احمد"]
);
انتظار db.چلائیں(
"UPDATE کھاتے SET بقیہ = بقیہ + ? WHERE نام = ?", [2000, "فاطمہ"]
);
انتظار db.نقطہ_محفوظ("منتقلی_1"); // یہاں تک محفوظ
// دوسرا آپریشن (جو ناکام ہو گا)
انتظار db.چلائیں(
"UPDATE کھاتے SET بقیہ = بقیہ - ? WHERE نام = ?", [9999, "احمد"]
);
// نقطہ پر واپس
انتظار db.نقطہ_واپسی("منتقلی_1");
انتظار db.نقطہ_چھوڑیں("منتقلی_1");
انتظار db.کمٹ();
// نتیجہ جانچیں
متغیر نتیجہ = انتظار db.سوال(
"SELECT نام, بقیہ FROM کھاتے ORDER BY شناخت"
);
کے_لیے (متغیر ک کا نتیجہ) {
لکھو(`${ک["نام"]}: ${ک["بقیہ"]}`);
}
// احمد: 8000, فاطمہ: 7000 (صرف پہلی منتقلی)
انتظار db.منقطع();
}
انتظار مرکز();
Factory Function (ڈیٹا_بیس_جوڑو) — فیکٹری فنکشن
Create any database connection by name using the factory function:
اردو: فیکٹری فنکشن
ڈیٹا_بیس_جوڑوسے نام کے ذریعے کوئی بھی ڈیٹا بیس کنکشن بنائیں۔ پہلے دلیل میں ڈیٹا بیس کی قسم بتائیں ("mysql"،"postgresql"،"sqlite"وغیرہ) اور دوسرے میں ترتیب دیں۔
درآمد { ڈیٹا_بیس_جوڑو } سے "اردو/ڈیٹا_بیس";
// ترتیب سے قسم کا تعین
متغیر db = ڈیٹا_بیس_جوڑو("mysql", {
"میزبان": "localhost",
"صارف": "root",
"پاس_ورڈ": "",
"ڈیٹا_بیس": "میری_ایپ"
});
انتظار db.جوڑیں();
// ...سب معمول کے طریقے کام کریں گے
انتظار db.منقطع();
Supported type strings: "mysql", "postgresql" / "postgres" / "pg", "sqlite", "mongodb", "firebase" / "firestore", "cassandra".
Complete Multi-Database Example
درآمد { مائی_ایس_کیو_ایل, مونگو_ڈی_بی, ایس_کیو_لائٹ } سے "اردو/ڈیٹا_بیس";
// ─── SQLite — میموری میں جانچ ───────────────────────────
غیر_متزامن فنکشن sqlite_جانچ() {
لکھو("=== SQLite ===");
متغیر db = نیا ایس_کیو_لائٹ(":memory:");
انتظار db.جوڑیں();
انتظار db.جدول_بنائیں("جانچ", {
"id": "INTEGER PRIMARY KEY AUTOINCREMENT",
"val": "TEXT"
});
انتظار db.داخل("جانچ", { "val": "اردو" });
متغیر r = انتظار db.سوال("SELECT * FROM جانچ");
لکھو(`SQLite: ${r[0]["val"]}`);
انتظار db.منقطع();
}
// ─── MongoDB — مجموعہ CRUD ───────────────────────────────
غیر_متزامن فنکشن mongo_جانچ() {
لکھو("\n=== MongoDB ===");
کوشش {
متغیر mongo = نیا مونگو_ڈی_بی({ "ڈیٹا_بیس": "urdu_test" });
انتظار mongo.جوڑیں();
متغیر کول = mongo.مجموعہ("جانچ_کول");
انتظار کول.حذف({});
انتظار کول.داخل({ "زبان": "اردو", "نسخہ": 1 });
متغیر ایک = انتظار کول.ایک_تلاش({ "زبان": "اردو" });
لکھو(`MongoDB: ${ایک["زبان"]} v${ایک["نسخہ"]}`);
انتظار کول.حذف({});
انتظار mongo.منقطع();
} پکڑو (غ) {
لکھو(`MongoDB چھوڑا: ${غ}`);
}
}
غیر_متزامن فنکشن مرکز() {
انتظار sqlite_جانچ();
انتظار mongo_جانچ();
لکھو("\nتمام جانچ مکمل");
}
انتظار مرکز();