⊗pyPmDOLVT 125 of 129 menu

Python-da Elaqe Cedveli vasitesile Elaqelendirme

Indi tutaq ki, user muxtelif seherlerde olub. Bu halda userler cedveli asagidaki formada ola biler:

users
id name city
1 user1 city1, city2, city3
2 user2 city1, city2
3 user3 city2, city3
4 user4 city1

Aydindır ki, melumatları bu formada saxlamaq duzgun deyil - seherleri ayrı bir cedvele çıxarmaq lazımdır. Budur o cedvel:

cities
id name
1 city1
2 city2
3 city3

Ancaq, biz etmeliyik ki, her bir user bir neçe sehere istinad ede bilsin. Iki cedvelleden istifade etmekle bunu etmek mümkin deyil.

Bizim sözdə elaqe cedveli tətbiq etmeye ehtiyacımız var, hansı ki, useri onun seherleri ile elaqelendirecek.

Bu cedvelin her bir qeydinde user ile bir seher arasında elaqe saxlanılacaq. Bununla belə, bir user üçün bu cedvelde neçe seherde olubsa, o qeder de qeyd olacaq.

Budur bizim elaqe cedvelimiz:

users_cities
id user_id city_id
1 1 1
2 1 2
3 1 3
4 2 1
5 2 2
6 3 2
7 3 3
8 4 1

Userler cedveli yalnız userlerin adlarını, elaqesiz saxlayacaq:

users
id name
1 user1
2 user2
3 user3
4 user4
5 user5

Sorğular

Gelin sorğu edek, onun vasitesile userleri onların seherleri ile birlikde çıxaraq. Bunun üçün bizim iki join etmeye ehtiyacımız olacaq: ilk join userlere elaqe cedvelini qoşacaq, ikinci join ise elaqeler vasitesile seherleri qoşacaq:

SELECT users.name as user_name, cities.name as city_name FROM users LEFT JOIN users_cities ON users_cities.user_id=users.id LEFT JOIN cities ON users_cities.city_id=cities.id

Sorğunun Neticesi

Python-da sorğumuzun neticesi her bir userin adını neçe defe, neçe seherle elaqeli olduğu qeder ehtiva edecek:

{'user_name': 'user1', 'city_name': 'city1'} {'user_name': 'user1', 'city_name': 'city2'} {'user_name': 'user1', 'city_name': 'city3'} {'user_name': 'user2', 'city_name': 'city1'} {'user_name': 'user2', 'city_name': 'city2'} {'user_name': 'user3', 'city_name': 'city2'} {'user_name': 'user3', 'city_name': 'city3'} {'user_name': 'user4', 'city_name': 'city1'} {'user_name': 'user5', 'city_name': None}

Belə bir lüğeti çevirmek ve onu aşağıdakı formaya salmaq daha rahat olardı:

{ 'user1': ['city1', 'city2', 'city3'], 'user2': ['city1', 'city2'], 'user3': ['city2', 'city3'], 'user4': ['city1'], 'user5': [] }

Belə bir çevirmeni yerine yetiren kodu yazaq. Boş bir lüğet user_cities_dct yaradaq, icine userler ve onların olduğu seherler haqqında melumatları tedricen daxil edeceyik. for dövründə iki dəyişən elan edirik user_name ve city_name, hansılarında userin adı ve seherin adı saxlanılacaq. Daha sonra şerti yazırıq - əgər user user_cities_dct içinde yoxdursa, onda o bu lüğete açar kimi əlavə olunacaq. Həmçinin şerti qeyd edirik ki, əgər city_name None deyilsə, onda o açarın dəyəri kimi əlavə olunacaq:

result = cursor.fetchall() user_cities_dct = {} for row in result: user_name = row['user_name'] city_name = row['city_name'] if user_name not in user_cities_dct: user_cities_dct[user_name] = [] if city_name is not None: user_cities_dct[user_name].append(city_name) print(user_cities_dct)

Praktiki Tapşırıqlar

Tutaq ki, mehsul bir neçe kateqoriyaya aid ola bilər. Saxlama quruluşunu izah edin.

Mehsulları onların kateqoriyaları ile birlikde çıxaran sorğunu yazın.

Alınan melumatları ul siyahısı şəklində çıxarın, elə ki, her bir li içinde evvelə mehsulun adı dur sun, sonra isə iki nöqteden sonra vergülle ayrılmış şəkildə bu mehsulun kateqoriyaları sıralansın. Təxminən belə:

<ul> <li>product1: category1, category2, category3</li> <li>product2: category1, category3</li> <li>product3: category1</li> </ul>
Azərbaycan
AfrikaansБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Biz saytin işi, analitika və fərdiləşdirmə üçün cookie istifadə edirik. Məlumatların emalı Məxfilik Siyasəti əsasında həyata keçirilir.
hamısını qəbul et konfiqurasiya et rədd et