⊗pyPmDOLVT 125 of 129 menu

Pautan Melalui Jadual Pautan dalam Python

Katakan sekarang pengguna pernah berada di bandar yang berbeza. Dalam kes ini, jadual pengguna mungkin mempunyai rupa berikut:

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

Jelas bahwa menyimpan data sedemikian adalah salah - bandar perlu diasingkan ke dalam jadual berasingan. Inilah jadualnya:

cities
id name
1 city1
2 city2
3 city3

Walau bagaimanapun, kita perlu memastikan bahawa setiap pengguna boleh merujuk kepada beberapa bandar. Dengan dua jadual sahaja, ini mustahil dilakukan.

Kita perlu memperkenalkan apa yang dipanggil jadual pautan, yang akan menghubungkan pengguna dengan bandar-bandarnya.

Dalam setiap catatan jadual ini, akan disimpan pautan antara seorang pengguna dan satu bandar. Dengan itu, untuk satu pengguna, akan terdapat banyak catatan dalam jadual ini, sebanyak bandar yang telah dia kunjungi.

Inilah jadual pautan kami:

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

Jadual pengguna akan menyimpan hanya nama pengguna, tanpa pautan:

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

Pertanyaan

Mari buat pertanyaan, yang dengannya kita akan mengambil pengguna bersama bandar mereka. Untuk ini, kita perlu melakukan dua sambungan: sambungan pertama akan menyambung jadual pautan kepada pengguna, dan sambungan kedua melalui pautan akan menyambung bandar:

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

Keputusan Pertanyaan

Keputusan pertanyaan kami dalam Python akan mengandungi nama setiap pengguna sebanyak kali berapa banyak bandar yang dia hubungkan:

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

Lebih mudah untuk menukar kamus sedemikian dan mengubahnya menjadi yang berikut:

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

Mari tulis kod yang melakukan penukaran sedemikian. Kami akan buat kamus kosong user_cities_dct, yang akan kami masukkan data secara beransur-ansur tentang pengguna dan bandar yang pernah mereka kunjungi. Dalam gelung for kami isytiharkan dua pembolehubah user_name dan city_name, di mana nama pengguna dan nama bandar akan disimpan. Seterusnya, kami tentukan syarat - jika pengguna tiada dalam user_cities_dct, maka dia akan ditambah ke dalam kamus ini sebagai kunci. Kami juga nyatakan syarat, bahawa jika city_name bukan None, maka ia akan ditambah sebagai nilai kunci:

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)

Tugas Praktikal

Katakan satu produk boleh tergolong dalam beberapa kategori. Terangkan struktur penyimpanan.

Tulis pertanyaan yang akan mengambil produk bersama kategori mereka.

Paparkan data yang diperoleh dalam bentuk senarai ul supaya dalam setiap li pertama sekali berdiri nama produk, dan selepas titik bertindih disenaraikan kategori produk ini. Secara kasar seperti ini:

<ul> <li>product1: category1, category2, category3</li> <li>product2: category1, category3</li> <li>product3: category1</li> </ul>
Melayu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Kami menggunakan kuki untuk operasi laman web, analisis dan personalisasi. Pemprosesan data dijalankan mengikut Polisi Kerahsiaan.
terima semua tataletak tolak