import pymysql conn = pymysql.connect(host='localhost', user='root', password='', database='tracerstudy_db', port=3306, charset='utf8mb4') cur = conn.cursor() # Get question IDs cur.execute('SELECT id, kode FROM questions WHERE kode IN ("F5a1", "F5a2")') questions = {row[1]: row[0] for row in cur.fetchall()} print(f'Found questions: {questions}') # ========== PROVINSI (F5a1) ========== province_data = [ ('10000', 'D.K.I. Jakarta'), ('20000', 'Jawa Barat'), ('30000', 'Jawa Tengah'), ('40000', 'D.I. Yogyakarta'), ('50000', 'Jawa Timur'), ('60000', 'Aceh'), ('70000', 'Sumatera Utara'), ('80000', 'Sumatera Barat'), ('90000', 'Riau'), ('100000', 'Jambi'), ('110000', 'Sumatera Selatan'), ('120000', 'Lampung'), ('130000', 'Kalimantan Barat'), ('140000', 'Kalimantan Tengah'), ('150000', 'Kalimantan Selatan'), ('160000', 'Kalimantan Timur'), ('170000', 'Sulawesi Utara'), ('180000', 'Sulawesi Tengah'), ('190000', 'Sulawesi Selatan'), ('200000', 'Sulawesi Tenggara'), ('210000', 'Maluku'), ('220000', 'Bali'), ('230000', 'Nusa Tenggara Barat'), ('240000', 'Nusa Tenggara Timur'), ('250000', 'Papua'), ('260000', 'Bengkulu'), ('270000', 'Maluku Utara'), ('280000', 'Banten'), ('290000', 'Kepulauan Bangka Belitung'), ('300000', 'Gorontalo'), ('310000', 'Kepulauan Riau'), ('320000', 'Papua Barat'), ('330000', 'Sulawesi Barat'), ('340000', 'Kalimantan Utara'), ('350000', 'Luar Negeri'), ] if 'F5a1' in questions: q_id = questions['F5a1'] for kode, teks in province_data: cur.execute(''' INSERT INTO answer_options (question_id, kode, teks, urutan) VALUES (%s, %s, %s, %s) ON DUPLICATE KEY UPDATE teks = VALUES(teks) ''', (q_id, kode, teks, len(province_data))) print(f'Inserted {len(province_data)} provinces') # ========== KABUPATEN/KOTA (F5a2) ========== # Sample beberapa kabupaten/kota utama kab_kota_data = [ # Jawa Timur (50000) ('52400', 'Kab. Jember', 1), ('56000', 'Kota Surabaya', 2), ('50200', 'Kab. Sidoarjo', 3), ('50100', 'Kab. Gresik', 4), ('52500', 'Kab. Banyuwangi', 5), ('52600', 'Kab. Pamekasan', 6), ('52700', 'Kab. Sampang', 7), ('52800', 'Kab. Sumenep', 8), ('50300', 'Kab. Mojokerto', 9), ('50400', 'Kab. Jombang', 10), ('50500', 'Kab. Bojonegoro', 11), ('50600', 'Kab. Tuban', 12), ('50700', 'Kab. Lamongan', 13), ('50800', 'Kab. Madiun', 14), ('50900', 'Kab. Ngawi', 15), ('51000', 'Kab. Magetan', 16), ('51100', 'Kab. Ponorogo', 17), ('51200', 'Kab. Pacitan', 18), ('51300', 'Kab. Kediri', 19), ('51400', 'Kab. Nganjuk', 20), ('51500', 'Kab. Blitar', 21), ('51600', 'Kab. Tulungagung', 22), ('51700', 'Kab. Trenggalek', 23), ('51800', 'Kab. Malang', 24), ('51900', 'Kab. Pasuruan', 25), ('52000', 'Kab. Probolinggo', 26), ('52100', 'Kab. Lumajang', 27), ('52200', 'Kab. Bondowoso', 28), ('52300', 'Kab. Situbondo', 29), ('56400', 'Kota Mojokerto', 30), ('56100', 'Kota Malang', 31), ('56200', 'Kota Madiun', 32), ('56300', 'Kota Kediri', 33), ('56500', 'Kota Blitar', 34), ('56600', 'Kota Pasuruan', 35), ('56700', 'Kota Probolinggo', 36), ('56800', 'Kota Batu', 37), # Jawa Barat (20000) ('20500', 'Kab. Bogor', 38), ('20600', 'Kab. Cianjur', 39), ('20700', 'Kab. Bandung', 40), ('20800', 'Kab. Bandung Barat', 41), ('21000', 'Kab. Sumedang', 41), ('21100', 'Kab. Garut', 42), ('21200', 'Kab. Tasikmalaya', 43), ('21400', 'Kab. Ciamis', 44), ('21500', 'Kab. Kuningan', 45), ('21600', 'Kab. Majalengka', 46), ('21700', 'Kab. Cirebon', 47), ('21800', 'Kab. Indramayu', 48), ('21900', 'Kab. Subang', 49), ('22000', 'Kab. Purwakarta', 50), ('22100', 'Kab. Karawang', 51), ('22200', 'Kab. Bekasi', 52), ('22300', 'Kab. Bandung Barat', 53), ('22500', 'Kab. Pangandaran', 54), ('26000', 'Kota Bandung', 55), ('26100', 'Kota Bogor', 56), ('26200', 'Kota Sukabumi', 57), ('26300', 'Kota Cirebon', 58), ('26500', 'Kota Bekasi', 59), ('26600', 'Kota Depok', 60), ('26700', 'Kota Cimahi', 61), ('26800', 'Kota Tasikmalaya', 62), ('26900', 'Kota Banjar', 63), # Jawa Tengah (30000) ('30100', 'Kab. Cilacap', 64), ('30200', 'Kab. Banyumas', 65), ('30300', 'Kab. Purbalingga', 66), ('30400', 'Kab. Banjarnegara', 67), ('30500', 'Kab. Kebumen', 68), ('30600', 'Kab. Purworejo', 69), ('30700', 'Kab. Wonosobo', 70), ('30800', 'Kab. Magelang', 71), ('30900', 'Kab. Boyolali', 72), ('31000', 'Kab. Klaten', 73), ('31100', 'Kab. Sukoharjo', 74), ('31300', 'Kab. Karanganyar', 75), ('31400', 'Kab. Wonogiri', 76), ('31500', 'Kab. Sragen', 77), ('31600', 'Kab. Grobogan', 78), ('31700', 'Kab. Blora', 79), ('31800', 'Kab. Rembang', 80), ('31900', 'Kab. Kudus', 81), ('32000', 'Kab. Jepara', 82), ('32100', 'Kab. Demak', 83), ('32200', 'Kab. Semarang', 84), ('32300', 'Kab. Temanggung', 85), ('32400', 'Kab. Kendal', 86), ('32500', 'Kab. Batang', 87), ('32600', 'Kab. Pekalongan', 88), ('32700', 'Kab. Pemalang', 89), ('32800', 'Kab. Tegal', 90), ('32900', 'Kab. Brebes', 91), ('36000', 'Kota Magelang', 92), ('36100', 'Kota Surakarta', 93), ('36200', 'Kota Salatiga', 94), ('36300', 'Kota Semarang', 95), ('36400', 'Kota Pekalongan', 96), ('36500', 'Kota Tegal', 97), # D.K.I. Jakarta (10000) ('16000', 'Kota Jakarta Pusat', 98), ('16100', 'Kota Jakarta Utara', 99), ('16200', 'Kota Jakarta Barat', 100), ('16300', 'Kota Jakarta Selatan', 101), ('16400', 'Kota Jakarta Timur', 102), ('10100', 'Kab. Kepulauan Seribu', 103), # D.I. Yogyakarta (40000) ('40100', 'Kab. Kulon Progo', 104), ('40200', 'Kab. Sleman', 105), ('40300', 'Kab. Gunung Kidul', 106), ('40400', 'Kab. Bantul', 107), ('46000', 'Kota Yogyakarta', 108), # Jawa Timur - extended ('51400', 'Kab. Nganjuk', 109), ('51900', 'Kab. Pasuruan', 110), ('52900', 'Kab. Bangkalan', 111), # Luar Negeri ('999999', 'Luar Negeri', 112), ] if 'F5a2' in questions: q_id = questions['F5a2'] for kode, teks, urutan in kab_kota_data: cur.execute(''' INSERT INTO answer_options (question_id, kode, teks, urutan) VALUES (%s, %s, %s, %s) ON DUPLICATE KEY UPDATE teks = VALUES(teks) ''', (q_id, kode, teks, urutan)) print(f'Inserted {len(kab_kota_data)} kabupaten/kota') conn.commit() print('Done!') conn.close()