-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathdata_loader.py
24 lines (22 loc) · 867 Bytes
/
data_loader.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# -*- encoding: utf-8 -*-
"""
Copyright (c) 2019 - present AppSeed.us
"""
from csv import reader
import click
import sqlalchemy
def data_importer(db, DataModel, file_path, fields : list, dtypes : list):
try:
with open(file_path) as fp:
rd = reader(fp)
for cnt, row in enumerate(rd):
data = {field: dtype(cell) for field, cell, dtype in zip(fields, row, dtypes) }
record = DataModel(**data)
db.session.add(record)
db.session.commit()
click.echo(click.style(f"Added {cnt} records in {DataModel.__name__}", fg="green"))
except sqlalchemy.exc.IntegrityError:
click.echo(click.style(f"Could not load data in {DataModel.__name__}, UNIQUE constraint failed", fg="red"))
db.session.rollback()
finally:
db.session.close()