Added output argument to wgexport.py

This commit is contained in:
2023-02-09 18:30:27 +01:00
parent c1c5176f7d
commit 80803b6959
2 changed files with 12 additions and 3 deletions

View File

@ -18,3 +18,4 @@ date;from;to;hours;category;name
2023-02-04;22:00;01:00;3;database;Mitglieder 2023-02-04;22:00;01:00;3;database;Mitglieder
2023-02-06;11:00;13:00;2;database;Mitglieder/Kataster 2023-02-06;11:00;13:00;2;database;Mitglieder/Kataster
2023-02-08;22:00;23:30;1.5;database;Flächenbindungen 2023-02-08;22:00;23:30;1.5;database;Flächenbindungen
2023-02-09;17:00;18:00;1;export;wgexport.py

1 date from to hours category name
18 2023-02-04 22:00 01:00 3 database Mitglieder
19 2023-02-06 11:00 13:00 2 database Mitglieder/Kataster
20 2023-02-08 22:00 23:30 1.5 database Flächenbindungen
21 2023-02-09 17:00 18:00 1 export wgexport.py

View File

@ -2,11 +2,13 @@
import argparse import argparse
import datetime import datetime
import os
import shutil
import decimal import decimal
import pypyodbc import pypyodbc
def convert(a) -> str: def convert(n, a) -> str:
if type(a) == str: if type(a) == str:
return f'"{a}"' return f'"{a}"'
elif type(a) == bool: elif type(a) == bool:
@ -26,9 +28,13 @@ def convert(a) -> str:
if __name__ == '__main__': if __name__ == '__main__':
parser = argparse.ArgumentParser() parser = argparse.ArgumentParser()
parser.add_argument('-o', '--output', default='tables')
parser.add_argument('wgdaten') parser.add_argument('wgdaten')
args = parser.parse_args() args = parser.parse_args()
shutil.rmtree(args.output)
os.makedirs(args.output, exist_ok=True)
pypyodbc.lowercase = False pypyodbc.lowercase = False
conn = pypyodbc.connect(f"Driver={{Microsoft Access Driver (*.mdb, *.accdb)}};Dbq={args.wgdaten};") conn = pypyodbc.connect(f"Driver={{Microsoft Access Driver (*.mdb, *.accdb)}};Dbq={args.wgdaten};")
cur = conn.cursor() cur = conn.cursor()
@ -38,17 +44,19 @@ if __name__ == '__main__':
tbls = tbls.fetchall() tbls = tbls.fetchall()
for file, _, t_name, t_type, _ in tbls: for file, _, t_name, t_type, _ in tbls:
print(t_name) print(t_name)
cur.execute(f"SELECT TOP 1 * FROM {t_name};") cur.execute(f"SELECT TOP 1 * FROM {t_name};")
desc = [(t[0], t[1]) for t in cur.description] desc = [(t[0], t[1]) for t in cur.description]
cur.fetchall() cur.fetchall()
print(desc) print(desc)
cur.execute(f"SELECT * FROM {t_name} ORDER BY `{desc[0][0]}`;") cur.execute(f"SELECT * FROM {t_name} ORDER BY `{desc[0][0]}`;")
cols = [t[0] for t in cur.description] cols = [t[0] for t in cur.description]
with open(f'tables/{t_name}.csv', 'wb+') as f: with open(f'{args.output}/{t_name}.csv', 'wb+') as f:
f.write((';'.join(cols) + '\n').encode('utf-8')) f.write((';'.join(cols) + '\n').encode('utf-8'))
for row in cur: for row in cur:
f.write((';'.join([convert(a) for a in row]) + '\n').encode('utf-8')) f.write((';'.join([convert(n, a) for n, a in zip(cols, row)]) + '\n').encode('utf-8'))
finally: finally:
cur.close() cur.close()
conn.close() conn.close()