Кор бо базаи маълумотҳо. Қисми 1

Дарси 8
Нақша:
1. Намудҳои базаи маълумотҳо
2. Китобхонаҳо барои кор бо базаи маълумотҳо дар Python
3. Кор бо базаи маълумотҳои SQLite
4. Эҷод ва пайвастшавӣ ба базаи маълумотҳо
5. Сохтани ҷадвал дар база барои нигоҳдории маълумотҳо
6. Ворид кардани маълумот
7. Дархости маълумот аз база
Муқаддима ба базаи маълумотҳо
Базаи маълумотҳо маҷмӯаи муташаккили маълумотҳоест, ки одатан дар шакли электронӣ нигоҳ дошта мешаванд ва сохторбандӣ карда мешаванд, то барномаҳои компютерӣ онҳоро ба осонӣ хонда ва коркард кунанд. Вазифаи асосии базаи маълумотҳо таъмин намудани механизми қулай ва самараноки нигоҳдорӣ, ҷустуҷӯ ва коркарди маълумотҳо мебошад.
Намудҳои базаи маълумотҳо
Якчанд намуди базаи маълумотҳо мавҷуданд, аммо ду синфи асосӣ релятсионӣ ва ғайрирасмӣ мебошанд.
Базаи маълумотҳои релятсионӣ (RDBMS): Дар ин намуди базаи маълумотҳо маълумот дар шакли ҷадвалҳо, ки аз сатрҳо ва сутунҳо иборатанд, нигоҳ дошта мешаванд. Намунаҳои базаи маълумотҳои релятсионӣ MySQL, PostgreSQL ва SQLite мебошанд.
Базаи маълумотҳои ғайрирасмӣ (NoSQL): Ин базаи маълумотҳо сохтори ҷадвалро истифода намебаранд. Онҳо метавонанд ҳуҷҷатҳо, коллексияҳо, графикҳо ё сутунҳои васеъро истифода баранд. Мисол MongoDB (ба ҳуҷҷат нигаронидашуда), Кассандра (сутуни васеъ) ва Neo4j (ба график).
Китобхонаҳо барои кор бо базаи маълумотҳо дар Python
Python дорои якчанд китобхонаҳо барои кор бо базаи маълумотҳо мебошад. Баъзе аз онҳо:
sqlite3: Китобхонаи дарунсохт барои кор бо базаи маълумотҳои SQLite.
MySQL Connector: Китобхона барои кор бо базаи маълумотҳои MySQL.
psycopg2: Китобхона барои кор бо базаи маълумотҳои PostgreSQL.
pymongo: Китобхона барои кор бо базаи маълумотҳои MongoDB.
Кор бо базаи маълумотҳои SQLite
Базаи маълумотҳо ҷузъи муҳими соҳаи технологияҳои иттилоотӣ буда, дар ташкил, нигоҳдорӣ ва коркарди маълумотҳо нақши муҳим мебозад. Дар байни бисёр базаи маълумотҳои дастрас, SQLite бо сохтори беназири худ ва доираи васеи барномаҳо фарқ мекунад.
        SQLite махзани дарунсохташуда дар сервер мебошад, ки қулай ва истифодааш осон аст. Яке аз бартариҳои асосии он дар он аст, ки он сервери алоҳидаро талаб намекунад ва онро барои ворид кардан ба барномаҳо ва истифода дар лоиҳаҳои хурд як ҳалли беҳтарин мегардонад. SQLite тамоми базаи маълумотҳоро дар як файл нигоҳ медорад, ки интиқол, нусхабардорӣ ва идоракунии маълумотро осон мекунад.
        SQLite ба модели реляционии маълумотҳо асос ёфтааст. Ҷадвалҳо аз сатрҳо ва сутунҳо иборатанд, ки дар он ҳар як сатр сабт ва сутунҳо атрибутҳои ин сабтро ифода мекунанд. Ин нигоҳдории сохторӣ ва муассири маълумотро таъмин мекунад ва инчунин ба истифодаи дархостҳои SQL барои ҳамкорӣ бо маълумотҳо имкон медиҳад.
        Компактӣ ва интиқолпазирии SQLite онро аз дигар базаи маълумотҳо фарқ мекунонад. SQLite транзаксияҳо, индексҳо, калидҳои хориҷӣ ва қобилияти кор бо намудҳои гуногуни маълумотро дастгирӣ мекунад.
        Яке аз бартариҳои асосии SQLite кросс-платформа мебошад. Дастгирӣ дар бисёр платформаҳо ва мавҷудияти китобхонаҳо барои қариб ҳамаи забонҳои барномасозӣ онро дар лоиҳаҳои гуногун, аз барномаҳои мобилӣ то веб-серверҳо истифода бурдан мумкин аст.
        Аммо, мисли ҳама гуна технология, SQLite маҳдудиятҳои худро дорад. Он асосан барои лоиҳаҳои хурд ва миёна пешбинӣ шудааст, он метавонад ҳангоми коркарди миқдори зиёди маълумотҳо ба мушкилоти иҷроиш дучор шавад.
        Хулоса, SQLite як пайванди муҳим дар ҷаҳони базаи маълумотҳо мебошад, ки содда, компактӣ ва самаранокиро дар идоракунии маълумотҳо таъмин мекунад.
Эҷод ва пайвастшавӣ ба базаи маълумотҳо
Китобхонаи sqlite3 барои кор бо базаи маълумотҳои SQLite истифода мешавад. Пеш аз ҳама, шумо бояд ба базаи маълумотҳо пайваст шавед:
1.    import sqlite3: Ин сатр модули sqlite3-ро ворид мекунад, ки интерфейсро барои кор бо пойгоҳи додаҳои SQLite дар Python таъмин мекунад. Бе ин модул, мо ба функсияҳо барои кор бо SQLite дастрасӣ пайдо карда наметавонем.
2.    connection = sqlite3.connect("myDatabase.db"): Ин сатр пайвастшавӣ ба пойгоҳи додаҳои SQLite –ро эҷод мекунад. Агар файли myDatabase.db аллакай мавҷуд бошад, барнома ба он пайваст мешавад; агар не, он файли навро бо ин ном эҷод мекунад. Тағйирёбандаи connection тавассути он мо бо пойгоҳи додаҳо ҳамкорӣ хоҳем кард.
3.    cursor = connection.cursor(): Дар ин ҷо объекти нави курсор сохта мешавад ва ба тағирёбандаи cursor таъин карда мешавад. Акнун тағирёбандаи «cursor» воситаи мо барои ҳамкорӣ бо пойгоҳи додаҳо мегардад.
Акнун мо бо воситаи (connection) ва (cursor) ба базаи маълумотҳо дастрасӣ дорем ва метавонем бо ёрии дархостҳои SQL дилхоҳ базаро созем ба он маълумот ворид кунем ё дилхоҳ амалро бо базаи маълумотҳои худ анҷом диҳем.
Сохтани ҷадвал дар база барои нигоҳдории маълумотҳо
Барои сохтани ҷадвал дархостҳои SQL истифода мешавад. Масалан, биёед ҷадвали истифодабарандаро эҷод кунем:
1. CREATE TABLE IF NOT EXISTS users: Ин қисми дархост ҷадвали наверо бо номи "users" эҷод мекунад. Агар ҷадвал бо ҳамон ном аллакай вуҷуд дошта бошад (IF NOT EXISTS), дархост иҷроишро бидуни сохтани ҷадвали нав идома медиҳад.

2. id INTEGER PRIMARY KEY, name TEXT, age INTEGER: Бо ин дархост мо сутунҳои id, name ва gae -ро барои ҳар як истифодабаранда сохта истодаем.
1. id INTEGER PRIMARY KEY: Ин сутун арзишҳои бутунро нигоҳ медорад ва ҳамчун калиди ибтидоӣ истифода мешавад. Калиди ибтидоӣ барои ҳар як сабти ҷадвал беназир (такрорнашаванда) аст ва ҳамчун идентификатори беназир хизмат мекунад.
2. name TEXT: Ин сутун номи ҳамаи истифодабарандагонро дар намуди сатр нигоҳ медорад
3. age INTEGER: Ин сутун сутун синну соли ҳамаи истифодабарандагонро дар намуди int(рақам) нигоҳ медорад.

Бо ин дархост мо ҷадвали истифодабарандагонро дар базаи маълумотҳо бо се сутун (id, name ва age) сохтем. Агар ҷадвале бо номи "users" аллакай вуҷуд дошта бошад, дархост танҳо бидуни ворид кардани тағирот ба пойгоҳи дода мегузарад. Ин барои пешгирӣ кардани хатогиҳо муфид аст, агар мо кӯшиш кунем, ки ҷадвали аллакай мавҷудбударо дубора эҷод кунем.
Ворид кардани маълумот
Маълумот бо истифода аз дархостҳои SQL ворид карда мешавад. Намунаи ворид кардани маълумотҳо:
        Ин код маълумотҳои истифодабарандагонро ба базаи маълумотҳо ворид мекунад. Биёед онро қадам ба қадам дида бароем:
1.    cursor.execute(...):
Усули execute() -и объекти курсор барои иҷрои дархости SQL истифода мешавад. Дар ин ҳолат, он маълумотро ба ҷадвали "users" дохил мекунад.
2.    INSERT INTO users (name, age) VALUES (?, ?):
INSERT INTO users: Ин қисми дархост нишон медиҳад, ки мо амалиёти ворид кардани маълумотҳоро ба ҷадвали "users" иҷро карда истодаем.
(name, age): Муайян мекунад, ки мо маълумотро ба кадом сутунҳо дохил мекунем. Дар ин ҳолат, мо арзишҳоро ба сутунҳои "name" ва "age" ворид мекунем.
VALUES (?, ?): Муайян мекунад, ки арзишҳоро аз куҷо гирифтан лозим аст. Ба ҷои арзишҳои мушаххас, мо аломатҳо ?-ро истифода мебарем. Дар қадами оянда арзишҳои воқеӣ дода мешаванд.
3.    (“Шаҳриёр”, 25):
Ин қисми код арзишҳои воқеиро таъмин мекунад, ки ба ҷои аломатҳои ? ворид карда мешаванд. Дар ин ҳолат, "Шаҳриёр" ба сутуни "name" ва рақами 25 ба сутуни "age" ворид карда мешавад.
Ҳамин тавр, пас аз иҷрои ин сатри код, дар ҷадвали "users" сабти нав бо номи "Шаҳриёр" ва синну соли 25 ворид карда мешавад. Амалиёти воридкунии маълумот барои илова кардани маълумотҳои нав ба базаи маълумотҳо васеъ истифода мешавад.
Дархости маълумот аз база
Барои маълумотҳои дар база бударо чоп кардан ва бо онҳо дилхоҳ амалро иҷро кардан бояд дархостҳои зеринро истифода барем:
Ин код ҳамаи маълумотҳои дар базаи users бударо дар экран ҷоп мекунад. Биёед ба ҳар як қисм он назар андозем:

1. cursor.execute("SELECT * FROM users"):
SELECT * FROM users: Ин қисми нишон медиҳад, ки мо аз ҷадвали "users" амалиёти дархости маълумотҳоро иҷро карда истодаем. Аломати * маънои онро дорад, ки мо ҳамаи сутунҳоро аз ҷадвал интихоб мекунем.
2. results = cursor.fetchall():
Усули fetchall() дар объекти курсор барои дарёфти ҳамаи маълумотҳои база истифода бурда мешавад. Дар ин ҳолат он ҳамаи маълумотҳоро да экран чоп мекунад.
results: Ин тағирёбандаест, ки дар он натиҷаҳои дархост нигоҳ дошта мешаванд. Пас аз иҷрои ин сатри код, натиҷаҳо рӯйхати наворҳоро дар бар мегиранд, ки дар он ҳар як навор як сабтро аз ҷадвали "истифодабарандагон" ифода мекунад.

Ҳамин тавр, пас аз иҷрои ин ду сатри код, тағирёбандаи натиҷаҳо ҳамаи сабтҳои ҷадвали "истифодабарандагон"-ро дар бар мегирад ва шумо метавонед бо ин маълумот баъдтар дар барномаи худ кор кунед.