⊗pyPmDOLVT 125 of 129 menu

Python-да байланыс кестесі арқылы байланыстыру

Енді пайдаланушы әртүрлі қалаларда болды делік. Бұл жағдайда пайдаланушылар кестесі келесі түрде болуы мүмкін:

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

Мәліметтерді осылай сақтау дұрыс емес екені түсінікті - қалаларды бөлек кестеге шығару керек. Міне, ол:

cities
id name
1 city1
2 city2
3 city3

Алайда, біз әрбір пайдаланушының бірнеше қалаға сілтеме жасауын қамтамасыз етуіміз керек. Екі кесте көмегімен мұны істеу мүмкін емес.

Бізге пайдаланушыны оның қалаларымен байланыстыратын байланыс кестесі деп аталатын нәрсені енгізу қажет болады.

Бұл кестенің әрбір жазбасында пайдаланушы мен бір қала арасындағы байланыс сақталады. Сонымен бірге бір пайдаланушы үшін осы кестеде ол қанша қалада болса, сонша жазба болады.

Міне, біздің байланыс кестеміз:

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

Пайдаланушылар кестесі тек пайдаланушылардың аттарын сақтайды, байланыстарсыз:

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

Сұраныстар

Пайдаланушыларды олардың қалаларымен бірге алатын сұраныс жасайық. Ол үшін бізге екі қосылу керек болады: бірінші қосылу пайдаланушыларға байланыс кестесін қосады, ал екінші қосылу байланыстар арқылы қалаларды қосады:

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

Сұраныс нәтижесі

Біздің сұранысымыздың нәтижесі Python-да әрбір пайдаланушының атын ол қанша қаламен байланысқан болса, сонша рет қамтиды:

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

Мұндай сөздікті түрлендіріп, оны келесі түрге келтіру ыңғайлырақ болар еді:

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

Мұндай түрлендіруді орындайтын код жазайық. Біз бос сөздік user_cities_dct жасаймыз, оған пайдаланушылар мен олардың болған қалалары туралы мәліметтерді біртіндеп енгіземіз. for циклінде біз екі айнымалыны user_name және city_name жариялаймыз, оларда пайдаланушы аты мен қала аты сақталады. Әрі қарай шартты жазамыз - егер пайдаланушы user_cities_dct-те жоқ болса, онда ол осы сөздікке кілт ретінде қосылады. Сондай-ақ, егер city_name None болмаса, онда ол кілт мәні ретінде қосылатынын көрсетеміз:

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)

Практикалық тапсырмалар

Тауар бірнеше санатқа жата алады делік. Сақтау құрылымын сипаттаңыз.

Тауарларды олардың санаттарымен бірге алатын сұраныс жазыңыз.

Алынған мәліметтерді ul тізімі түрінде шығарыңыз, сонда әрбір li-де алдымен өнім аты тұрып, одан кейін қос нүктеден кейін осы өнімнің санаттары үтірлермен бөліп жазылсын. Мынадай:

<ul> <li>product1: category1, category2, category3</li> <li>product2: category1, category3</li> <li>product3: category1</li> </ul>
Қазақ
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČ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
Біз сайттың жұмысы, аналитика және персонализация үшін cookie файлдарын қолданамыз. Деректерді өңдеу Құпиялылық саясаты бойынша жүреді.
барлығын қабылдау баптау қабылдамау