restore.py
1.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import csv
class Restore:
def __init__(self, db_session, table, filename):
self.db_session = db_session
self.table = table
self.filename = filename
def open_file(self):
return open(self.filename)
def run(self):
q = self.db_session.query(self.table)
if q.first():
return
with self.open_file() as f:
reader = csv.DictReader(f)
for cf in reader:
row = self.table()
for fieldname in cf:
val = cf[fieldname]
if not val:
continue
setattr(row, fieldname, val)
self.db_session.add(row)
return True
class Append(Restore):
def __init__(self, db_session, table, filename, keys):
Restore.__init__(self, db_session, table, filename)
self.keys = keys
self.run()
def run(self):
with self.open_file() as f:
reader = csv.DictReader(f)
filter_ = dict()
for cf in reader:
for key in self.keys:
filter_[key] = cf[key]
q = self.db_session.query(self.table).filter_by(**filter_)
found = q.first()
if found:
continue
row = self.table()
for fieldname in cf:
val = cf[fieldname]
if not val:
continue
setattr(row, fieldname, val)
self.db_session.add(row)