· 9 years ago · Dec 14, 2016, 05:48 PM
1import sqlite3
2import json
3import urllib.request
4import os.path
5
6conn = sqlite3.connect('duma.db') # Ñоздание коннекта
7c = conn.cursor() # Ñоздание курÑора
8
9#Создаем 4 таблица в БД: депутатов,фракций,законопроектов,голоÑов
10#Таблица голоÑов ÑÐ°Ð¼Ð°Ñ Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ: в ней (кол-во законопроектов)*(кол-во депутатов) Ñтрочек
11def drop_table_deputies(): # удаление таблицы депутатов, еÑли она еÑть
12 conn.execute('DROP TABLE IF EXISTS deputies')
13
14
15def drop_table_factions():# удаление таблицы фракций, еÑли она еÑть
16 conn.execute('DROP TABLE IF EXISTS factions')
17
18
19def drop_table_laws():# удаление таблицы законов, еÑли она еÑть
20 conn.execute('DROP TABLE IF EXISTS laws')
21
22
23def drop_table_votes():# удаление таблицы голоÑов, еÑли она еÑть
24 conn.execute('DROP TABLE IF EXISTS votes')
25
26
27def create_table_deputies(): # Ñоздание таблицы депутатов, еÑли её нет
28 c.execute(
29 """CREATE TABLE IF NOT EXISTS deputies(deputy_id INTEGER PRIMARY KEY, name VARCHAR(50), faction_id INTEGER, FOREIGN KEY(faction_id) REFERENCES factions(faction_id))""")# таблица имеет полÑ: id депутата/ФИО депутата/его фракциÑ. Ключ ÑвÑзывает ее Ñ Ñ‚Ð°Ð±Ð»Ð¸Ñ†ÐµÐ¹ фракций
30
31
32def create_table_factions():# Ñоздание таблицы фракций, еÑли её нет
33 c.execute("""CREATE TABLE IF NOT EXISTS factions(faction_id INTEGER PRIMARY KEY, title VARCHAR(4))""")# таблица имеет полÑ: if фракции/название фракции
34
35def create_table_laws():# Ñоздание таблицы законов, еÑли её нет
36 c.execute(
37 """CREATE TABLE IF NOT EXISTS laws(law_id INTEGER PRIMARY KEY, title VARCHAR(1000), aszdUrl VARCHAR(200), date_time DATE)""")# таблица имеет полÑ: id закона/название закона/url закона/Ð²Ñ€ÐµÐ¼Ñ Ñ€Ð°ÑÑмотрениÑ
38
39
40def create_table_votes():# Ñоздание таблицы голоÑов, еÑли её нет
41 c.execute(
42 """CREATE TABLE IF NOT EXISTS votes(deputy_id INTEGER, vote VARCHAR(7), law_id INTEGER, FOREIGN KEY (deputy_id) REFERENCES deputies(deputy_id), FOREIGN KEY (law_id) REFERENCES laws(law_id))""")# таблица имеет полÑ: id депутата/его голоÑ/id закона. Ключи ÑвÑзывает таблицу Ñ Ð¿Ð¾Ð»ÐµÐ¼ id депутата таблицы депутатов и Ñ Ð¿Ð¾Ð»ÐµÐ¼ id закона таблицы закона
43
44
45
46def data_entry_deputies(listed_data): # добавление информации в таблицу депутатов из ÑпиÑка
47 c.executemany("INSERT INTO deputies VALUES(deputy_id, name, faction_id)", listed_data)
48 conn.commit()
49
50
51def data_entry_factions(listed_data_factions): # добавление информации в таблицу фракций из ÑпиÑка
52 c.executemany("INSERT INTO factions VALUES(faction_id, title)", listed_data_factions)
53 conn.commit()
54
55
56def data_entry_laws(listed_data_laws): # добавление информации в таблицу законов из ÑпиÑка
57 c.executemany('INSERT INTO laws VALUES(law_id, title, aszdUrl, date_time)', listed_data_laws)
58 conn.commit()
59
60
61def data_entry_votes(listed_data_votes): # добавление информации в голоÑов из ÑпиÑка
62 c.executemany('INSERT INTO votes VALUES(deputy_id, vote, law_id)', listed_data_votes)
63 conn.commit()
64
65
66def read_from_deputies(): # вывод вÑей таблицы депутатов на Ñкран
67 c.execute("SELECT * FROM deputies")
68 for row in c.fetchall():
69 print(row)
70
71
72def read_from_factions():# вывод вÑей таблицы фракций на Ñкран
73 c.execute("SELECT * FROM factions")
74 for row in c.fetchall():
75 print(row)
76
77
78def read_from_laws():# вывод вÑей законов на Ñкран
79 c.execute("SELECT * FROM laws")
80 for row in c.fetchall():
81 print(row)
82
83
84def get_data():# функциÑ, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ñ€Ð°ÑпарÑивает вÑе jsonÑ‹ в маÑÑивы, которые потом запихнутÑÑ Ð² таблицу, Ñ Ð½Ðµ буду Ñту функцию #разжевывать, Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´ÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‡Ñ‚Ð¾ мы делаем хватит и того, что Ñ Ð½Ð°Ð¿Ð¸Ñал выше и поÑле функции)
85 urlData1 = "D:\\poll1"
86 urlJson = 75687
87 listed_data_laws = []
88 listed_data_votes = []
89 listed_data_deputies = set()
90 listed_data_factions = set()
91 percent = 0
92 while urlJson <= 96003:
93 new_percent = round((((urlJson - 75687) / (96003 - 75687)) * 100), 1)
94 if new_percent != percent:
95 print(str(new_percent) + "%")
96 percent = new_percent
97 urlJson += 1
98 urlData2 = (urlData1 + "\\" + str(urlJson) + ".json")
99 if os.path.isfile(urlData2):
100 with open(urlData2, encoding='utf-8') as f:
101 data1 = json.loads(f.read())
102 listed_data_laws.append([data1['id'], data1['title'], data1['asozdUrl'], data1['datetime']])
103 q = data1['id']
104 for d in data1['votes']:
105 listed_data_votes.append([d['deputy']['id'], d['result'], q])
106 listed_data_deputies.add((d['deputy']['id'], d['deputy']['name'], d['deputy']['faction']['id']))
107 listed_data_factions.add((d['deputy']['faction']['id'], d['deputy']['faction']['title']))
108 return listed_data_laws, listed_data_votes, listed_data_deputies, listed_data_factions
109
110
111laws_data, votes_data, deputies_data, factions_data = get_data()#запиÑÑŒ в переменные маÑÑивы данных
112# далее 4 раза делаем одно и то же:
113drop_table_laws()#удалÑем таблицу еÑли она еÑть
114create_table_laws()# Ñоздаем еÑли ее нет
115data_entry_laws(laws_data)#кладем в таблицу переменную полученную выше
116print('TABLE LAWS IS DONE')
117
118drop_table_votes()
119create_table_votes()
120data_entry_votes(votes_data)
121print('TABLE VOTES IS DONE')
122
123drop_table_deputies()
124create_table_deputies()
125data_entry_deputies(deputies_data)
126print('TABLE DEPUTIES IS DONE')
127
128drop_table_factions()
129create_table_factions()
130data_entry_factions(factions_data)
131print('TABLE FACTIONS IS DONE')
132
133c.close()
134conn.close()