⊗pyPmDOLVT 125 of 129 menu

पायथन में लिंकिंग टेबल के माध्यम से संबंध बनाना

मान लीजिए अब उपयोगकर्ता विभिन्न शहरों में गया है। इस स्थिति में उपयोगकर्ताओं की टेबल इस प्रकार हो सकती है:

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

क्वेरी का परिणाम

पायथन में हमारी क्वेरी का परिणाम प्रत्येक उपयोगकर्ता का नाम उतनी बार शामिल करेगा, जितने शहरों से वह जुड़ा हुआ है:

{'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çaisMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
हम साइट के कार्य, विश्लेषण और व्यक्तिगतकरण के लिए कुकीज़ का उपयोग करते हैं। डेटा प्रसंस्करण गोपनीयता नीति के अनुसार किया जाता है।
सभी स्वीकार करें कॉन्फ़िगर करें अस्वीकार करें