Update plz.py and add view.sql
This commit is contained in:
14
data/plz.py
14
data/plz.py
@ -6,6 +6,7 @@ import requests
|
|||||||
import re
|
import re
|
||||||
import xlrd
|
import xlrd
|
||||||
import tempfile
|
import tempfile
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
URL = 'https://www.post.at/g/c/postlexikon'
|
URL = 'https://www.post.at/g/c/postlexikon'
|
||||||
@ -25,20 +26,27 @@ def get_excel_url() -> str:
|
|||||||
|
|
||||||
|
|
||||||
def download_excel() -> List[Tuple[int, str, int, str, int, str]]:
|
def download_excel() -> List[Tuple[int, str, int, str, int, str]]:
|
||||||
with tempfile.NamedTemporaryFile() as f:
|
f_name = None
|
||||||
|
try:
|
||||||
|
f = tempfile.NamedTemporaryFile(delete=False)
|
||||||
with requests.get(get_excel_url(), stream=True) as r:
|
with requests.get(get_excel_url(), stream=True) as r:
|
||||||
if r.status_code != 200:
|
if r.status_code != 200:
|
||||||
raise RuntimeError(f'Unexpected response: {r.status_code} {r.reason}')
|
raise RuntimeError(f'Unexpected response: {r.status_code} {r.reason}')
|
||||||
for chunk in r.iter_content(chunk_size=8192):
|
for chunk in r.iter_content(chunk_size=8192):
|
||||||
f.write(chunk)
|
f.write(chunk)
|
||||||
|
f_name = f.name
|
||||||
|
f.close()
|
||||||
|
|
||||||
rows = []
|
rows = []
|
||||||
wb = xlrd.open_workbook(f.name)
|
wb = xlrd.open_workbook(f_name)
|
||||||
sheet = wb.sheet_by_index(0)
|
sheet = wb.sheet_by_index(0)
|
||||||
for r in range(1, sheet.nrows):
|
for r in range(1, sheet.nrows):
|
||||||
row = sheet.row_values(r)
|
row = sheet.row_values(r)
|
||||||
rows.append((int(row[0]), row[1], int(row[2]), row[3], int(row[4]), row[5]))
|
rows.append((int(row[0]), row[1], int(row[2]), row[3], int(row[4]), row[5]))
|
||||||
return rows
|
return rows
|
||||||
|
finally:
|
||||||
|
if f_name is not None:
|
||||||
|
os.remove(f_name)
|
||||||
|
|
||||||
|
|
||||||
def write_sql(data: List[Tuple[int, str, int, str, int, str]]) -> None:
|
def write_sql(data: List[Tuple[int, str, int, str, int, str]]) -> None:
|
||||||
@ -56,7 +64,7 @@ def write_sql(data: List[Tuple[int, str, int, str, int, str]]) -> None:
|
|||||||
|
|
||||||
f.write(b"INSERT INTO AT_ort VALUES\n")
|
f.write(b"INSERT INTO AT_ort VALUES\n")
|
||||||
for okz, (name, gkz) in orte.items():
|
for okz, (name, gkz) in orte.items():
|
||||||
f.write(f"({okz:5}, {gkz}, '{name}'),\n".encode('utf8'))
|
f.write(f"({okz:5}, {gkz}, '{name.replace(',', ', ').replace('.Bez.:', '. Bez.: ')}'),\n".encode('utf8'))
|
||||||
f.seek(-2, 1)
|
f.seek(-2, 1)
|
||||||
f.write(b';\n\n')
|
f.write(b';\n\n')
|
||||||
|
|
||||||
|
13
sql/view.sql
Normal file
13
sql/view.sql
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
|
||||||
|
CREATE VIEW v_plz AS
|
||||||
|
SELECT plz, o.name AS ort, g.name AS gemeinde, p.name AS bestimmungsort
|
||||||
|
FROM AT_gemeinde g
|
||||||
|
JOIN AT_ort o ON o.gkz = g.gkz
|
||||||
|
JOIN AT_plz p ON p.okz = o.okz;
|
||||||
|
|
||||||
|
CREATE VIEW v_plz_wg AS
|
||||||
|
SELECT plz, o.name AS ort, g.name AS gemeinde, p.name AS bestimmungsort
|
||||||
|
FROM AT_gemeinde g
|
||||||
|
JOIN AT_ort o ON o.gkz = g.gkz
|
||||||
|
JOIN AT_plz p ON p.okz = o.okz
|
||||||
|
WHERE (g.gkz / 100) IN (308, 316, 310, 312, 321);
|
Reference in New Issue
Block a user