-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathauroraload.py
executable file
·81 lines (62 loc) · 2.07 KB
/
auroraload.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
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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/usr/local/bin/python3.4
'''
Persistence model for pyaurora
.. moduleauthor:: paul sorenson
'''
import datetime as dt
import sqlalchemy as sa
from sqlalchemy.orm import sessionmaker
def makemodel(metadata):
samples = sa.Table('samples', metadata,
sa.Column('utc', sa.DateTime, primary_key=True),
sa.Column('gridPowerAll', sa.Float),
sa.Column('powerPeakToday', sa.Float),
sa.Column('dailyEnergy', sa.Float),
sa.Column('weeklyEnergy', sa.Float),
sa.Column('partialEnergy', sa.Float),
sa.Column('getEnergy10', sa.Float),
sa.Column('frequencyAll', sa.Float),
sa.Column('gridVoltageAll', sa.Float),
sa.Column('gridVoltageAverage', sa.Float),
sa.Column('gridCurrentAll', sa.Float),
sa.Column('bulkVoltageDcDc', sa.Float),
sa.Column('in1Voltage', sa.Float),
sa.Column('in1Current', sa.Float),
sa.Column('in2Voltage', sa.Float),
sa.Column('in2Current', sa.Float),
sa.Column('pin1All', sa.Float),
sa.Column('pin2All', sa.Float),
sa.Column('iLeakDcDc', sa.Float),
sa.Column('iLeakInverter', sa.Float),
sa.Column('boosterTemp', sa.Float)
)
return samples
def insert_csv(gp='aurora_2015-*.csv'):
import glob
import csv
paths = glob.glob(gp)
for path in paths:
with open(path, 'r') as csvin:
rdr = csv.DictReader(csvin)
for d in rdr:
d['utc'] = dt.datetime.strptime(d['utc'],
'%Y-%m-%d %H:%M:%S.%f').replace(microsecond=0)
yield d
def main():
db = sa.create_engine('sqlite:///aurora.db')
#db.echo = True
metadata = sa.MetaData(db)
model = makemodel(metadata)
model.create()
conn = db.connect()
chunksize = 1000
chunk = []
for row in insert_csv():
chunk.append(row)
if len(chunk) >= chunksize:
conn.execute(model.insert(), chunk)
chunk = []
if len(chunk) > 0:
conn.execute(model.insert(), chunk)
if __name__ == '__main__':
main()