⊗pyPmDOLVT 125 of 129 menu

Kuunganisha Kupitia Jedwali la Uhusiano katika Python

Hebu sasa mtumiaji amekuwepo katika miji tofauti. Katika keso hii jedwali la watumiaji linaweza kuwa na muonekano ufuatao:

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

Ni wazi kuwa kuhifadhi data kwa njia hii sio sahihi - miji inahitaji kutolewa kwenye jedwali tofauti. Hii hapa:

cities
id name
1 city1
2 city2
3 city3

Hata hivyo, tunahitaji kufanya hivi ili kila mtumiaji aweze kurejelea miji kadhaa. Kwa kutumia jedwali mbili hii haiwezekani.

Tutahitaji kuanzisha kinachojulikana kama jedwali la uhusiano, ambalo litaunganisha mtumiaji na miji yake.

Katika kila kipande cha data cha jedwali hili kitawekewa uhusiano kati ya mtumiaji na mji mmoja. Kwa hiyo kwa mtumiaji mmoja katika jedwali hili kutakuwa na maingizo mengi kama idadi ya miji aliyowahi kuwepo.

Hapa kuna jedwali letu la uhusiano:

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

Jedwali la watumiaji litahifadhi tu majina ya watumiaji, bila miunganisho:

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

Maswali

Hebu tufanye swali, ambalo litawatoa watumiaji pamoja na miji yao. Kwa hiyo tutahitaji kufanya viunganishi viwili: kiunganishi cha kwanza kitaunganisha kwa watumiaji jedwali la uhusiano, na kiunganishi cha pili kupitia miunganisho kitaunganisha miji:

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

Matokeo ya Swali

Matokeo ya swali letu katika Python yatakuwa yana jina la kila mtumiaji mara nyingi, kama idadi ya miji anayounganishwa nayo:

{'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}

Ingekuwa rahisi zaidi kubadilisha kamusi kama hiyo na kuibadilisha kuwa ifuatayo:

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

Tuandike msimbo, unaoftua ubadilishaji huo. Tufanye kamusi tupu user_cities_dct, ambayo tutaingiza taratibu data kuhusu watumiaji na miji, waliofiika. Katika kitanzi for tunatangaza vigezo viwili user_name na city_name, ambavyo vitahifadhi jina la mtumiaji na jina la mji. Ifuatayo tunaweka sharti - ikiwa mtumiaji hayupo katika user_cities_dct, basi yeye ataongezwa kwenye kamusi hii kama ufunguo. Pia tuonyeshe sharti, kwamba ikiwa city_name sio None, basi itaongezwa kama thamani ya ufunguo:

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)

Kazi Za Vitendo

Hebu bidhaa iweze miliki vitengo kadhaa vya bidhaa. Eleza muundo wa uhifadhi.

Andika swali, litakalotoa bidhaa pamoja na vitengo vyake vya bidhaa.

Onyesha data iliyopatikana kwa njia ya orodha ya ul ili, katika kila kipengee cha li mwanzoni kutakuwa na jina la bidhaa, na baada ya alama ya koloni kwa kutumia koma vitengo vya bidhaa vya bidhaa hii. Kwa mfano:

<ul> <li>product1: category1, category2, category3</li> <li>product2: category1, category3</li> <li>product3: category1</li> </ul>
Kiswahili
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Tunatumia kuki kwa ajili ya uendeshaji wa tovuti, uchambuzi na ubinafsishaji. Usindikaji wa data unafanyika kulingana na Sera ya Faragha.
kubali yote sanidi kataa