0% found this document useful (0 votes)
53 views24 pages

PyMySQL (Pythonda MySQL) - O'zbekcha

MySql o'zbekcha python

Uploaded by

bekgaming265
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
53 views24 pages

PyMySQL (Pythonda MySQL) - O'zbekcha

MySql o'zbekcha python

Uploaded by

bekgaming265
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 24

@python_uzbek_coder PyMySQL

PyMySQL

ABBOSBEK IBRAGIMOV 1
@python_uzbek_coder PyMySQL

MUNDARIJA

1.MySQL haqida boshlang’ich tushunchalar……….……………….………… 3

2. Pythonda MySQL……………......……………………………………….... 4

3. Pythonda MySQL – ma’lumotlar bazasini yaratish..…………………….... 5

4. Pythonda MySQL – jadval yaratish...….………………………………..….. 6

5. Pythonda MySQL – jadvalga ma’lumotlarni qo’shish ....…… .………..…. 8

6. Pythonda MySQL – SELECT FROM (ma’lumotlarni tanlash).…….…..… 10

7. Pythonda MySQL - WHERE (ma’lumotlarni filtrlash)..…..…..………..… 12

8. Pythonda MySQL – ORDER BY ( ma’lumotlarni saralash)…...………..… 14

9. Pythonda MySQL – DELETE FROM (ma’lumotlarni o’chirish)..……..… 16

10. Pythonda MySQL – DROP TABLE (jadvallarni o’chirish)...…………..… 17

11. Pythonda MySQL – UPDATE TABLE (jadvallarni yangilash).....……..… 18

12. Pythonda MySQL – LIMIT (cheklovlar)....…….……………...………..… 19

13. Pythonda MySQL – JOIN (jadvallarni birlashtirish)....…………..……..… 21

ABBOSBEK IBRAGIMOV 2
@python_uzbek_coder PyMySQL

MySQL haqida boshlang’ich tushunchalar

MySQL — bu eng mashhur va juda ko'p foydalaniladigan ma'lumotlar bazasini boshqarish


tizimi(MBBT) hisoblanadi. Bu tizim juda katta ma'lumotlar bilan ishlash uchun yaratilmagan,
aksincha biroz kichik hajmdagi bazalar bilan katta tezlikda ishlash uchun yaratilgan. Uning
asosiy ishlash doirasi, saytlar hisoblanadi. Hozirgi kunda juda ko'p sayt va bloklarning
ma'lumotlari aynan shu MBBT saqlanadi.

Ho'sh, saytlarning nimalari bazada saqlanishi mumkin? Dastlab, ma'lumotlar saqlash


uchun dasturchilar fayllardan foydalanishgan, ya'ni fayl ochilib kerakli ma'lumotlar u
yerga saqlanib, kerakli paytda chaqirib ishlatilgan. Keyinchalik fayllardan voz kechilib
(noqulayliklar yuzaga kelgan, ya'ni faylni ochish, o'qish, yopish,.. ko'p vaqtni olib qo'ygan, u
yerdan qidirish, xullas juda ko'p), ma'lumotlar bazasiga o'tilgan. Bazada saytdagi maqolalar,
sayt foydalanuvchilari haqidagi ma'lumotlar, sayt kontentlari, qoldirilgan kommentariyalar,
savol-javoblar, hisoblagich natijalari va shunga o'xshash juda ko'p ma'lumotlar saqlanadi.
MySQL shunday ma'lumotlarni o'zida saqlaydi.

MySQL — juda katta tezlikda ishlovchi va qulay hisoblanadi. Bu tizimda ishlash juda
sodda va uni o'rganish qiyinchilik tug'dirmaydi. MySQL tizimi tcx kompaniyasi tomonidan,
ma'lumotlarni tez qayta ishlash uchun korxona miqyosida ishlatishga yaratilgan. Keyinchalik
ommalashib, saytlarning asosiy bazasi sifatida yoyildi.

So'rovlar SQL tili orqali amalga oshiriladi. Bu MBBT relyatsion ma'lumotlar baza hisoblanadi.
Bu degani baza jadvallar, jadvallar esa ustunlardan tashkil topgandir.

MySQL MBBTi 2 xil turdagi litsenziyaga ega. Birinchisi tekin, ya'ni MYSQLni ko'chirib
olish va ishlatish hech qanday harajat talab qilmaydi va GPL(GNU Public Licenseb, GNU)
litsenziyasiga asoslanadi. Ikkinchi turi, GPL shartiga ko'ra, agar siz MySQL kodlarini biror
dasturingizda ishlatsangiz, bu dasturingiz ham GPL(tekin) bo'lishi kerak. Bu esa dasturchiga
to'g'ri kelmaydi. Shuning uchun, bu dasturingizni pullik qilishingiz uchun MySQL pullik
litsenziyasini sotib olishingiz kerak. MySQL logotipi delfin hisoblanadi. Bu delfinni ismi
«Sakila»dir. Bu logotipni OpenSource tuzuvchilaridan biri Ambrose Twebaze ga tegishlidir.
MySQL juda ko'p operatsion tizimlar bilan ishlay oladi. Bularni yozadigan bo'lsam: AIX,
BSDi, FreeBSD, HP-UX, Linux, Mac OS X, NetBSD, OpenBSD, OS/2 Warp, SGI
IRIX, Solaris, SunOS, UnixWare, Windows 95, Windows 98, Windows NT,
Windows 2000, Windows XP, Windows Server 2000, Windows Vista, Windows
7,…

MySQL shved korxonasi MySQl AB ga tegishli bo'lgan, keyinchalik SUN firmasi MySQL
ni o'ziniki qilib olgan. Bir necha yil oldin esa, gigant korxonalardan biri Oracle, SUN
firmasini sotib oldi va hozirda MySQL Oracle firmasi mahsuloti sifatida chiqib kelmoqda.
Bu bir hisobda Microsoft SQL Server ga katta raqobatdosh ekanligini anglatadi.
MySQL bir necha serverlarning bir qismi hisoblanadi. Misol uchun, WAMP, AppServ,
LAMP, Denwer,… Kliyentlar MySQL serveriga ma'lum bir kutubxonalar orqali ulanadi.
MySQL ga quyidagi dasturlash tillari ulanib ishlashi mumkin: Delphi, C, C++, Java,
Perl, Php, Python, Ruby va boshqalar.

ABBOSBEK IBRAGIMOV 3
@python_uzbek_coder PyMySQL
Pythonda MySQL

Python dasturlarida ma’lumotlar bazasi ishlatilishi mumkin. Eng mashhur ma'lumotlar bazalaridan biri bu MySQL.

MySQL ma'lumotlar bazasi

Ushbu qo'llanmada berilgan kod misollari bilan tajriba o'tkazish uchun kompyuteringizda MySQL o'rnatilgan bo'lishi kerak.
Bepul MySQL ma'lumotlar bazasini https://www.mysql.com/downloads/ saytidan yuklab olishingiz mumkin.

MySQL drayverini o'rnatish

Pythonga MySQL ma'lumotlar bazasiga kirish uchun MySQL drayveri kerak. Ushbu qo'llanmada biz "MySQL Connector"
drayveridan foydalanamiz. "MySQL Connector" ni o'rnatish uchun PIP-dan foydalanishni tavsiya etamiz. PIP, ehtimol
sizning Python muhitingizda o'rnatilgan bo'lishi ham mumkin.

MySQL Connector ni o’rnatish uchun buyruqlar satri ya’ni cmd da PIP joylashgan joyga o'ting va quyidagilarni kiriting:

"MySQL Connector" ni yuklab olish va o'rnatish:

C:\Users\Your Name\AppData\Local\Programs\Python\Python36-32\Scripts>python -m pip install mysql-connector

Bu buyruqni cmd da kiritganingizgan so’ng siz endi MySQL drayverini yuklab olgan va o’rnatgan hisoblanasiz !!!

MySQL Connector ning o’rnatilganligini tekshirish

O'rnatish muvaffaqiyatli bo'lganligini yoki "MySQL Connector" o'rnatilganligini tekshirish uchun quyidagi tarkibga ega
Python sahifasini yarating:

import mysql.connector

# agar ushbu sahifa xatolarsiz bajarilgan bo'lsa, sizda "mysql.connector" moduli o'rnatilgan.

Agar yuqoridagi kod xatosiz bajarilgan bo'lsa, "MySQL Connector" o'rnatilgan va foydalanishga tayyor.

Ma’lumotlar ba’zasi bilan ulanishni yaratish

Demak endi ma'lumotlar bazasiga ulanishni yaratamiz. Bunda MySQL ma'lumotlar bazangizdan foydalanuvchi nomi va
paroldan foydalaning va quyidagilarni python fayliga kiriting:

import mysql.connector

mydb = mysql.connector.connect(host="localhost", user="myusername", passwd="mypassword" )


print(mydb)

ABBOSBEK IBRAGIMOV 4
@python_uzbek_coder PyMySQL
Natija:

<mysql.connector.connection.MySQLConnection object ar 0x016645F0>

Bunda foydalanuvchi nomi va parolga o’zingiz xoxlagan nomdan foydalanishingi mumkin. Demak biz ma’lumotlar bazasi
bilan aloqani o’rnatdik. Endi siz ma'lumotlar bazasi ustida SQL operatorlari yordamida so’rovlarni amalga oshirib bemalol
ish olib borishingiz mumkin.

Python MySQL - ma'lumotlar bazasini yaratish

Ma'lumotlar bazasini yaratish

MySQL-da ma'lumotlar bazasini yaratish uchun "CREATE DATABASE" iborasidan foydalaniladi.

Misol

"mydatabase" nomli ma'lumotlar bazasini yaratamiz:

import mysql.connector
mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword" )
mycursor = mydb.cursor() mycursor.execute("CREATE DATABASE mydatabase")

#Bu sahifa xatosiz bajarildi, ma'lumotlar bazasini muvaffaqiyatli yaratdingiz.

Agar yuqoridagi kod xatosiz bajarilgan bo'lsa, siz ma'lumotlar bazasini muvaffaqiyatli yaratgan bo’lasiz.

Ma'lumotlar bazasi mavjudligini tekshirish

Ma'lumotlar bazasi mavjudligini tizimdagi barcha ma'lumotlar bazalarini ro'yxatlash orqali ya’ni "SHOW DATABASES"
iborasi yordamida tekshirishingiz mumkin:

Misol

Tizimdagi ma'lumotlar bazalari ro'yxatini qaytaramiz:

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword" )


mycursor = mydb.cursor()

mycursor.execute("SHOW DATABASES")

for x in mycursor:
print(x)

ABBOSBEK IBRAGIMOV 5
@python_uzbek_coder PyMySQL

Natija:

('information_scheme',) ('mydatabase',) ('performance_schema',) ('sys',)

Yoki buni boshqacha usuli ulanishda ma'lumotlar bazasiga kirishga urinib ko'rishimiz mumkin:

Misol:

"mydatabase" ma'lumotlar bazasiga ulanishni harakat qilib ko'ramiz:

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword", database=


"mydatabase" )

# Agar bu sahifa xatosiz bajarilgan bo'lsa, "mydatabase" ma'lumotlar bazasi "tizimingizda mavjud

Agar ma'lumotlar bazasi mavjud bo'lmasa, siz xatoga yo'l qo'ygan bo’lasiz.

Python MySQL-jadval yaratish

Jadval yaratish

MySQL-da jadval yaratish uchun "CREATE TABLE" iborasidan foydalaniladi. Bunda jadvalni yaratishda ma'lumotlar bazasi
nomi aniq yozilganligiga ishonch hosil qiling.

Misol

"Customers" ya’ni mijozlar deb nomlangan jadval yaratamiz:

import mysql.connector

mydb = mysql.connector.connect(host="localhost", user="myusername", passwd="mypassword", database="mydatabase" )

mycursor = mydb.cursor()

mycursor.execute("CREATE TABLE customers (name VARCHAR(255), address VARCHAR(255))")

#Agar ushbu sahifa xatosiz bajarilgan bo'lsa, siz " mijozlar "nomli jadvalni muvaffaqiyatli yaratdingiz.

Agar yuqoridagi kod xatosiz bajarilgan bo'lsa, endi siz jadvalni muvaffaqiyatli yaratdingiz.

ABBOSBEK IBRAGIMOV 6
@python_uzbek_coder PyMySQL

Jadval mavjudligini tekshirish

Ma'lumotlar bazangizdagi barcha jadvallarni "SHOW TABLES" iborasi bilan ro'yxatlash orqali jadval mavjudligini
tekshirishingiz mumkin:

Misol

Tizim ma'lumotlar bazalari ro'yxatini qaytaramiz:

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword", database="mydatabase")

mycursor = mydb.cursor()

mycursor.execute("SHOW TABLES")

for x in mycursor:
print(x)

Natija:

('customers',)

Yuqoridagi natijada demak bizning ma’lumotlar bazamizda bitta customers nomli jadval mavjudligi haqida xabar chiqarildi.

Asosiy kalit (Primary key)

Jadvalni yaratishda, shuningdek, har bir yozuv uchun noyob kalit bilan ya’ni qaytarilmas id ustun yaratishingiz kerak. Buni
PRIMAR KEY ni aniqlash orqali amalga oshirish mumkin. Biz har bir yozuv ya’ni jadvaldagi har bir qator uchun qaytarilmas
noyob raqam kiritadigan "INT AUTO_INCREMENT PRIMARY KEY" iborasidan foydalanamiz. Bunda id qaytarilmas raqam
1 dan boshlab, har bir yozuv ya’ni qator uchun bittadan oshib ketuvchi takrorlanmas kalit ustun hosil bo’ladi.

Misol

Jadvalni yaratishda asosiy kalitni yaratamiz:

import mysql.connector

mydb = mysql.connector.connect( host="localhost",user="yourusername",passwd="yourpassword",database="mydatabase)

mycursor = mydb.cursor()

mycursor.execute("CREATE TABLE customers (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255),
address VARCHAR(255))")

# Agar ushbu sahifa xatosiz bajarilgan bo'lsa," mijozlar "jadvali endi asosiy kalitga ega

ABBOSBEK IBRAGIMOV 7
@python_uzbek_coder PyMySQL

Agar jadval allaqachon mavjud bo'lsa, ALTER TABLE kalit so'zidan foydalaning:

Misol

Mavjud jadvalda birlamchi kalit yaratamiz:

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="yourusername", passwd="yourpassword",


database="mydatabase" )
mycursor = mydb.cursor()

mycursor.execute("ALTER TABLE customers ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY")

#Agar ushbu sahifa xatosiz bajarilgan bo'lsa," mijozlar "jadvalida endi asosiy kalit mavjud

Python MySQL- jadvalga ma’lumotlarni qo'shish

Jadvalga ma’lumotlarni joylashtirish

MySQL-da jadvalni to'ldirish uchun "INSERT INTO" iborasidan foydalamiz.

Misol

"Customers" jadvaliga bir qator ma’lumotlarni kiritamiz:

import mysql.connector
mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword",
database="mydatabase" )
mycursor = mydb.cursor()
sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = ("John", "Highway 21")

mycursor.execute(sql, val)
mydb.commit()

print(mycursor.rowcount, "yozuv kiritildi.")

Natija:

1 ta yozuv kiritildi

Muhim ! : Ushbu bayonotga e’tibor bering: mydb.commit(). Commit() funksiyasi ma’lumotlar bazasiga
o’zgarishlarni kiritishni talab qiladi, aks holda jadvalga o’zgartirishlar kiritilmaydi.

ABBOSBEK IBRAGIMOV 8
@python_uzbek_coder PyMySQL

Jadvalga bir necha qator ma’lumotlarni kiritish

Jadvalga bir nechta qatorlar ma’lumotlarni kiritish uchun executemany () funksiyasidan foydalaniladi. Bunda
executemany() funksiyasining ikkinchi parametri siz kiritmoqchi bo'lgan ma'lumotlarni o'z ichiga olgan kataklar ro'yxati ya’ni
quyidagi misolimizda val o’zgaruvchisi hisoblanadi.

Misol
"Customers" jadvalini ma'lumotlar bilan to'ldiramiz:

import mysql.connector

mydb = mysql.connector.connect ( host="localhost", user="myusername", passwd="mypassword",


database="mydatabase")
mycursor = mydb.cursor()

sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"


val = [ ('Peter', 'Lowstreet 4'), ('Amy', 'Apple st 652'), ('Hannah', 'Mountain 21'),
('Michael', 'Valley 345'), ('Sandy', 'Ocean blvd 2'), ('Betty', 'Green Grass 1'),
('Richard', 'Sky st 331'), ('Susan', 'One way 98'), ('Vicky', 'Yellow Garden 2'),
('Ben', 'Park Lane 38'), ('William', 'Central st 954'), ('Chuck', 'Main Road 989'),
('Viola', 'Sideway 1633') ]

mycursor.executemany(sql, val)
mydb.commit()

print(mycursor.rowcount, " ta yozuv kiritildi.")

Natija:

13 ta yozuv kiritildi.

Kiritilgan identifikatorni olish

Siz kiritgan satr identifikatorini kursor ob'ektidan so'rab olishingiz mumkin.

Izoh: Agar bitta qatorni ko’proq qo’shsangiz, bunda oxirgi kiritilgan satrning id-si qaytariladi.

Misol

Bir qatorni kiriting va identifikatorni qaytaramiz:

import mysql.connector

mydb = mysql.connector.connect ( host="localhost", user="myusername", passwd="mypassword",


database="mydatabase" )
mycursor = mydb.cursor()

ABBOSBEK IBRAGIMOV 9
@python_uzbek_coder PyMySQL

sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"


val = ("Michelle", "Blue Village")
mycursor.execute(sql, val)
mydb.commit()

print("1 ta yozuv kiritildi, ID:", mycursor.lastrowid)

Natija:
1 ta yozuv kiritildi, ID: 15

Python MySQL - SELECT FROM (ma’lumotlarni tanlash)

Ma’lumotlarni jadvaldan tanlab olish

MySQL-da jadvallardagi ma’lumotlarni tanlash olish uchun "SELECT" iborasidan foydalaniladi.

Misol

"Customers" jadvalidagi barcha ma’lumotlarni tanlaymiz va ekranga chiqaramiz:

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword",


database="mydatabase")

mycursor = mydb.cursor()
mycursor.execute("SELECT * FROM customers")

myresult = mycursor.fetchall()

for x in myresult:
print(x)

Natija:

(1, 'John', 'Highway 21')


(2, 'Peter', 'Lowstreet 27')
(3, 'Amy', 'Apple st 652')
(4, 'Hannah', 'Mountain 21')
(5, 'Michael', 'Valley 345')
(6, 'Sandy', 'Ocean blvd 2')
(7, 'Betty', 'Green Grass 1')
(8, 'Richard', 'Sky st 331')
(9, 'Susan', 'One way 98')
(10, 'Vicky', 'Yellow Garden 2')
(11, 'Ben', 'Park Lane 38')
(12, 'William', 'Central st 954')
(13, 'Chuck', 'Main Road 989')
(14, 'Viola', 'Sideway 1633')
(15, 'Michelle', 'Blue Village')
ABBOSBEK IBRAGIMOV 10
@python_uzbek_coder PyMySQL

Izoh: Biz yuqoridagi misolimizda barcha qatordagi ma’lumotlarni olib kelish uchun ximat qiladigan fetchall()
funksiyasidan foydalandik.

Jadvaldagi ma’lum bir ustunlarni tanlab olish

Jadvaldagi faqat bir qator ustunlarni tanlash uchun "SELECT" iborasidan so'ng ustun nom (lar) i ishlatiladi:

Misol

Faqat ism va manzil ustunlarini tanlaymiz:

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword",


database="mydatabase" )

mycursor = mydb.cursor()
mycursor.execute("SELECT name, address FROM customers")
myresult = mycursor.fetchall()

for x in myresult:
print(x)

Natija:

('John', 'Highway 21')


('Peter', 'Lowstreet 27')
('Amy', 'Apple st 652')
('Hannah', 'Mountain 21')
('Michael', 'Valley 345')
('Sandy', 'Ocean blvd 2')
('Betty', 'Green Grass 1')
('Richard', 'Sky st 331')
('Susan', 'One way 98')
('Vicky', 'Yellow Garden 2')
('Ben', 'Park Lane 38')
('William', 'Central st 954')
('Chuck', 'Main Road 989')
('Viola', 'Sideway 1633')
('Michelle', 'Blue Village')

fetchone () funksiyasidan foydalanish

Agar sizga faqat bitta qator qiziq bo'lsa, fetchone () usulidan foydalanishingiz mumkin.

fetchone () usuli natijaning birinchi qatorini qaytaradi:

ABBOSBEK IBRAGIMOV 11
@python_uzbek_coder PyMySQL

Misol

Faqat bitta qatorni olish:

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword",


database="mydatabase" )
mycursor = mydb.cursor()

mycursor.execute("SELECT * FROM customers")


myresult = mycursor.fetchone()

print(myresult)

Natija:

(1, 'John', 'Highway 21')

Ko’rib turganingizdek fetchone() funksiyasi bizga faqat bitta qator ma’lumotlarni qaytardi.

Python MySQL – where (ma’lumotlarni filtrlash)

Jadvaldagi ma’lumotlarni filtrlash orqali tanlab olish

Jadvaldan ma’lumotlarni tanlab olishda, "WHERE" iborasi yordamida tanlovni filtrlashingiz mumkin. Ya’ni bunda filtrlash
orqali tanlab olish deganda ma’lumotning faqat bizning shartlarimizga oid bo’lgan ma’lumotlarni tanlab olish tushuniladi.

Misol

Manzil "Park Lane 38" bo'lgan ma’lumot (lar) ni tanlab olamiz:

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword",


database="mydatabase")
mycursor = mydb.cursor()

sql = "SELECT * FROM customers WHERE address = 'Park Lane 38'"


mycursor.execute(sql)

myresult = mycursor.fetchall()

for x in myresult:
print(x)

ABBOSBEK IBRAGIMOV 12
@python_uzbek_coder PyMySQL

Natija:

(11, 'Ben', 'Park Lane 38')

Demak bizga yuqoridagi kod haqiqatdan ham manzili “Park Lane 38” bo’lgan ma’lumotlar ustunini qaytardi.

Jadvallardagi ma’lumotlarda biror bir so’z yoki belgilarning mavjudligini


tekshirish

Biz jadvallardan ma’lumotlarni tanlab olayotganimizda ma'lum bir harf yoki ibora bilan boshlanadigan, o'z ichiga olgan yoki
tugaydigan yozuvlarni ham tanlab olishimiz mumkin. Bunda bunday tanlashlarni amalga oshirish uchun uchun % dan
foydalanamiz.

Misol

Manzilda "way" ya’ni “yo’l” so'zi bo'lgan yozuvlarni tanlab olamiz:

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword",


database="mydatabase" )
mycursor = mydb.cursor()

sql = "SELECT * FROM customers WHERE address Like '%way%'"


mycursor.execute(sql)

myresult = mycursor.fetchall()

for x in myresult:
print(x)

Natija:

(1, 'John', 'Highway 21')


(9, 'Susan', 'One way 98')
(14, 'Viola', 'Sideway 1633')

Demak yuqoridagi kod bizga manzilida “way” ya’ni yo’l so’zi qatnashgan ma’lumotlar ustuni chiqarib berdi. Agar biz so’rovni
“%way” holatida bergamizmizda bizga manzili “way” so’zi bilan tugaydigan ma’lumotlar ustuni, “way%” holatida
berganimizda esa bizga manzili “way” so’zi bilan boshlanadigan ma’lumotlar ustunini qaytarar edi.

SQL in'ektsiyasini oldini olish

Agar so'rov qiymatlari foydalanuvchi tomonidan taqdim etilsa, siz qiymatlardan qochishingiz kerak. Bu ma'lumotlar bazasini
yo'q qilish yoki suiste'mol qilish uchun keng tarqalgan veb-xakerlik texnikasi bo'lgan SQL in'ektsiyalarining oldini olish uchun
zarur hisoblanadi.

ABBOSBEK IBRAGIMOV 13
@python_uzbek_coder PyMySQL

Mysql.connector moduli so'rov qiymatlaridan qochish usullariga ega:

Misol

%S usulini qo'llagan holda so'rovlar qiymatidan qochish:

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword",


database="mydatabase")
mycursor = mydb.cursor()

sql = "SELECT * FROM customers WHERE address = %s" adr = ("Yellow Garden 2", )
mycursor.execute(sql, adr)

myresult = mycursor.fetchall()

for x in myresult:
print(x)

Natija:

(10, 'Vicky', 'Yellow Garden 2')

Python MySQL- order by (ma’lumotlarni saralash)

Natijalarni saralash

MySQL-da natijani o'sish yoki kamayish tartibida saralash uchun ORDER BY operatoridan foydalaniladi. ORDER BY kalit
so'zi sukut bo'yicha natijani o’sish bo’yicha saralaydi. Natijani kamayish tartibida saralash uchun esa DESC kalit so'zidan
foydalaniladi.

Misol

Natijani alifbo bo'yicha name ya’ni nom bo'yicha saralash:

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword",


database="mydatabase" )
mycursor = mydb.cursor()

sql = "SELECT * FROM customers ORDER BY name"


mycursor.execute(sql)

myresult = mycursor.fetchall()

for x in myresult:
print(x)

ABBOSBEK IBRAGIMOV 14
@python_uzbek_coder PyMySQL

Natija:

(3, 'Amy', 'Apple st 652')


(11, 'Ben', 'Park Lane 38')
(7, 'Betty', 'Green Grass 1')
(13, 'Chuck', 'Main Road 989')
(4, 'Hannah', 'Mountain 21')
(1, 'John', 'Highway 21')
(5, 'Michael', 'Valley 345')
(15, 'Michelle', 'Blue Village')
(2, 'Peter', 'Lowstreet 27')
(8, 'Richard', 'Sky st 331')
(6, 'Sandy', 'Ocean blvd 2')
(9, 'Susan', 'One way 98')
(10, 'Vicky', 'Yellow Garden 2')
(14, 'Viola', 'Sideway 1633')
(12, 'William', 'Central st 954')

DESC kalit so’zidan foydalangan holda saralash

Natijani kamayish tartibida saralash uchun DESC kalit so'zidan foydalaniladi.

Misol

Natijani alifbo bo'yicha teskari nom ya’ni kamayish tartibida saralash:

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword", database="my


database")
mycursor = mydb.cursor()

sql = "SELECT * FROM customers ORDER BY name DESC"


mycursor.execute(sql)

myresult = mycursor.fetchall()

for x in myresult:
print(x)

Natija:

(12, 'William', 'Central st 954')


(14, 'Viola', 'Sideway 1633')
(10, 'Vicky', 'Yellow Garden 2')
(9, 'Susan', 'One way 98')
(6, 'Sandy', 'Ocean blvd 2')
(8, 'Richard', 'Sky st 331')
(2, 'Peter', 'Lowstreet 27')
(15, 'Michelle', 'Blue Village')
(5, 'Michael', 'Valley 345')
ABBOSBEK IBRAGIMOV 15
@python_uzbek_coder PyMySQL

(1, 'John', 'Highway 21')


(4, 'Hannah', 'Mountain 21')
(13, 'Chuck', 'Main Road 989')
(7, 'Betty', 'Green Grass 1')
(11, 'Ben', 'Park Lane 38')
(3, 'Amy', 'Apple st 652')

Python MySQL- Delete from (ma’lumotlarni o’chirish)

Jadvaldagi ma’lumotlarni o'chirish

Mavjud jadvaldagi ma’lumotlarni "DELETE FROM" iborasi yordamida o'chirib tashlashingiz mumkin:

Misol

Manzil "Mountain 21" bo'lgan har qanday yozuvni o'chirib tashlaymiz:

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword",


database="mydatabase" )
mycursor = mydb.cursor()

sql = "DELETE FROM customers WHERE address = 'Mountain 21'"


mycursor.execute(sql)

mydb.commit()

print(mycursor.rowcount, "yozuv o’chirildi")

Natija:

1 ta yozuv o'chirildi

DELETE sintaksisidagi WHERE bandiga e'tibor bering: WHERE bandida qaysi ma’lumot (lar) o'chirilishi kerakligi
ko'rsatilgan. Agar "WHERE" bandini tashlab ketsangiz, jadvaldagi barcha ma’lumotlar o'chiriladi!

SQL in'ektsiyasini oldini olish

Har qanday so'rovning qiymatlaridan, shuningdek, o'chirish bayonotlaridan qochish yaxshi amaliyot deb hisoblanadi.
Bu ma'lumotlar bazasini yo'q qilish yoki suiste'mol qilish uchun keng tarqalgan veb-xakerlik texnikasi bo'lgan SQL
in'ektsiyalarining oldini olish uchun zarur hisoblanadi.

Mysql.connector moduli o'chirish bayonotidagi qiymatlardan qochish uchun % s plomba vositasidan foydalanadi.

ABBOSBEK IBRAGIMOV 16
@python_uzbek_coder PyMySQL
Misol

Joylashtiruvchi % s usuli yordamida qiymatlardan qochish:

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword",


database="mydatabase" )
mycursor = mydb.cursor()

sql = "DELETE FROM customers WHERE address = %s" adr = ("Yellow Garden 2", )
mycursor.execute(sql, adr)

mydb.commit()

print(mycursor.rowcount, " ta yozuv o’chirildi")

Natija:

1 ta yozuv o'chirildi

Python MySQL DROP table (jadvallarni o’chirish)

Jadvalni o'chirish

MySQL – da mavjud bo’lgan jadvalni "DROP TABLE" iborasi yordamida o'chirib tashlashingiz mumkin.

Misol

"Customers" jadvalini o'chiramiz:

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword", database="my


database" )
mycursor = mydb.cursor()

sql = "DROP TABLE customers"


mycursor.execute(sql)

#Agar ushbu sahifa hech qanday xatosiz bajarilgan bo'lsa, siz "mijozlar" jadvalini muvaffaqiyatli o'chirib tashladin
giz.

Agar jadval mavjud bo'lmasa DROP TABLE ning ishlatilishi

Agar o'chirmoqchi bo'lgan jadval allaqachon o'chirilgan bo'lsa yoki boshqa biron sababga ko'ra mavjud bo'lmasa, xatoga
yo'l qo'ymaslik uchun IF EXISTS kalit so'zidan foydalanishingiz mumkin.

ABBOSBEK IBRAGIMOV 17
@python_uzbek_coder PyMySQL

Misol

Agar “customers” jadvali mavjud bo'lsa, "customers" jadvalini o'chirib tashlang:

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword",


database="mydatabase" )
mycursor = mydb.cursor()

sql = "DROP TABLE IF EXISTS customers"


mycursor.execute(sql)

#Agar ushbu sahifa hech qanday xatosiz bajarilgan bo'lsa, siz" mijozlar "jadvalini muvaffaqiyatli o'chirib tashladin
giz

PythonDA MySQL – UPDATE TABLE (jadvallarni yangilash)

Jadvallarni yangilash

MySQL – da "UPDATE" iborasi yordamida jadvaldagi mavjud yozuvlarni yangilashingiz mumkin.

Misol

"Valley 345" dan "Canyoun 123" gacha bo'lgan manzil ustunini qayta yozamiz:

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword", database="m


ydatabase" )
mycursor = mydb.cursor()

sql = "UPDATE customers SET address = 'Canyon 123' WHERE address = 'Valley 345'"
mycursor.execute(sql)

mydb.commit()

print(mycursor.rowcount, "yozuv o’zgartirildi")

Natija:

1 ta yozuv o’zgartirildi

Muhim ! : Ushbu bayonotga e’tibor bering: mydb.commit(). Commit() funksiyasi ma’lumotlar bazasiga
o’zgarishlarni kiritishni talab qiladi, aks holda jadvalga o’zgartirishlar kiritilmaydi.

ABBOSBEK IBRAGIMOV 18
@python_uzbek_coder PyMySQL

UPDATE sintaksisidagi WHERE bandiga e'tibor bering: WHERE bandida qaysi yozuv yoki yozuvlar yangilanishi kerakligi
ko'rsatilgan. Agar "WHERE" bandini tashlab ketsangiz, jadvaldagi barcha ma’lumotlar yangilanadi!

SQL in'ektsiyasini oldini olish

Har qanday so'rovning qiymatlaridan, shuningdek, yangilanish bayonotlaridan qochish yaxshi amaliyot deb hisoblanadi.
Bu ma'lumotlar bazasini yo'q qilish yoki suiiste'mol qilish uchun keng tarqalgan veb-xakerlik texnikasi bo'lgan SQL
in'ektsiyalarining oldini olish uchun. Zarur hisoblanadi.

Mysql.connector moduli o'chirish bayonotidagi qiymatlardan qochish uchun %s plomba vositasidan foydalanadi:

Misol

%S usulini ishlatib, qiymatlardan qochish mumkin:

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword",


database="mydatabase" )
mycursor = mydb.cursor()

sql = "UPDATE customers SET address = %s WHERE address = %s"


val = ("Valley 345", "Canyon 123")
mycursor.execute(sql, val)

mydb.commit()

print(mycursor.rowcount, "yozuv o’rgartirildi")

Natija:

1 ta yozuv o’zgartirildi

PythonDA MySQL- limit (cheklovlar)

Natijalarni cheklash

So'rovdan qaytarilgan ma’lumotlar sonini "LIMIT" iborasi yordamida cheklashingiz mumkin.

Misol

"Customers" jadvalidagi 5 ta birinchi yozuvni tanlaymiz:

ABBOSBEK IBRAGIMOV 19
@python_uzbek_coder PyMySQL

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword",


database="mydatabase" )
mycursor = mydb.cursor()

mycursor.execute("SELECT * FROM customers LIMIT 5")

myresult = mycursor.fetchall()

for x in myresult:
print(x)

Natija:

(1, 'John', 'Highway 21')


(2, 'Peter', 'Lowstreet 27')
(3, 'Amy', 'Apple st 652')
(4, 'Hannah', 'Mountain 21')
(5, 'Michael', 'Valley 345')

Boshqa pozitsiyadan boshlash

Uchinchi ma’lumotdan boshlab beshta ma’lumotni qaytarishni istasangiz, "OFFSET" kalit so'zidan foydalanishingiz mumkin:

Misol

3-pozitsiyadan boshlang va 5 ta yozuvni qaytaring:

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword",


database="mydatabase" )
mycursor = mydb.cursor()

mycursor.execute("SELECT * FROM customers LIMIT 5 OFFSET 2")


myresult = mycursor.fetchall()

for x in myresult:
print(x)

Natija:

(3, 'Amy', 'Apple st 652')


(4, 'Hannah', 'Mountain 21')
(5, 'Michael', 'Valley 345')
(6, 'Sandy', 'Ocean blvd 2')
(7, 'Betty', 'Green Grass 1')

ABBOSBEK IBRAGIMOV 20
@python_uzbek_coder PyMySQL

Python MySQL- JOIN (Jadvallarni birlashtirish)

Ikki yoki undan ortiq jadvalni birlashtirish

JOIN iborasini ishlatib, ular orasidagi bog'liq ustunga asoslanib, ikki yoki undan ortiq jadvaldagi qatorlarni birlashtirish
mumkin.

Sizda "users" jadvali va "products" nomli jadvallar bor deb faraz qilaylik:

users

{id: 1, ism: 'Jon', fav: 154},


{id: 2, ism: 'Piter', fav: 154},
{id: 3, ism: 'Emi', fav: 155},
{id : 4, ismi: 'Xanna', fav:},
{id: 5, ismi: 'Maykl', fav:}

products

{id: 154, ismi: 'Shokolad osmoni'},


{id: 155, ismi: 'Tasty Lemons'},
{id: 156, ismi: 'Vanilla Dreams'}

Ushbu ikkita jadval foydalanuvchilarning fav maydonini va mahsulotlarning identifikator maydonini ishlatib birlashtirilishi
mumkin.

Misol

Foydalanuvchilarning sevimli mahsuloti nomini ko'rish uchun foydalanuvchilar jadvalini mahsulotlar jadvaliniga
birlashtiramiz:

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword",


database="mydatabase" )
mycursor = mydb.cursor()

sql = "SELECT \ users.name AS user, \ products.name AS favorite \ FROM users \ INNER JOIN products ON user
s.fav = products.id"
mycursor.execute(sql)

myresult = mycursor.fetchall()

for x in myresult:
print(x)

ABBOSBEK IBRAGIMOV 21
@python_uzbek_coder PyMySQL

Natija:

('John', 'Chocolate Heaven')


('Peter', 'Chocolate Heaven')
('Amy', 'Tasty Lemon')

Izoh: INNER JOIN o’rniga JOIN dan foydalanishingiz mumkin. Ularning ikkalasi ham siga bir xil natijani beradi.

LEFT JOIN

Yuqoridagi misolda Xanna va Maykl natijadan chetlashtirildi, chunki INNER JOIN faqatgina mos ma’lumotlar bo'lgan joyda
ma’lumotlarni ko'rsatadi.

Agar siz barcha foydalanuvchilarga, hatto sevimli mahsuloti bo'lmasa ham, ularni ko'rsatishni xohlasangiz, LEFT JOIN
iborasidan foydalaning:

Misol

Barcha foydalanuvchilarni va ularning sevimli mahsulotlarini tanlash:

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword", database="m


ydatabase" )
mycursor = mydb.cursor()

sql = "SELECT \ users.name AS user, \ products.name AS favorite \ FROM users \ LEFT JOIN products ON users.fa
v = products.id"
mycursor.execute(sql)

myresult = mycursor.fetchall()

for x in myresult:
print(x)

Natija:

('John', 'Chocolate Heaven')


('Peter', 'Chocolate Heaven')
('Amy', 'Tasty Lemon')
('Hannah', None)
('Michael', None)

RIGHT JOIN

Agar siz barcha mahsulotlarni qaytarib berishni istasangiz va ularni eng sevimlisi bo'lgan foydalanuvchilarga, hatto biron bir
foydalanuvchi o'zlarining sevimli mahsulotlariga ega bo'lmagan holatida ham birlashtirmoqchi bo’lsangiz RIGHT JOIN
iborasidan foydalaning:

ABBOSBEK IBRAGIMOV 22
@python_uzbek_coder PyMySQL

Misol

Barcha mahsulotlarni va ularni eng sevimli deb topgan foydalanuvchi (lar) ni tanlang:

import mysql.connector

mydb = mysql.connector.connect( host="localhost", user="myusername", passwd="mypassword", database="m


ydatabase" )
mycursor = mydb.cursor()

sql = "SELECT \ users.name AS user, \ products.name AS favorite \ FROM users \ RIGHT JOIN products ON user
s.fav = products.id"
mycursor.execute(sql)

myresult = mycursor.fetchall()

for x in myresult:
print(x)

Natija:

('John', 'Chocolate Heaven')


('Peter', 'Chocolate Heaven')
('Amy', 'Tasty Lemon')
(None, 'Vanilla Dreams')

Izoh: Sevimli mahsulotga ega bo’lmagan Xanna va Maykl natijaga kiritilmagan.

ABBOSBEK IBRAGIMOV 23
@python_uzbek_coder PyMySQL

Ushbu qo’llanma internet tarmog’idagi ma’lumotlar asosida yaratildi.


Qo’llanmada kamchiliklar va xatoliklar bo’lgan bo’lsa uzur so’raymiz.
Bizni to’g’ri tushunasiz degan umiddamiz.

Biz ham xuddi sizdek oddiy insonmiz !!!

Bir ishni bajarishni mo’ljalladingizmi, unga bugunoq kirishing.


Vaqtni boy bermang !!!

(BILL GEYTS)

ABBOSBEK IBRAGIMOV 24

You might also like