From cc93b11e2f72621a57ed306c90266d1e8fa408d1 Mon Sep 17 00:00:00 2001 From: brainkiller Date: Sun, 26 Apr 2020 20:58:14 +0200 Subject: [PATCH 1/2] Ported for mysql support --- util/database.py | 56 +++++++++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/util/database.py b/util/database.py index 07be0b9..8e92dee 100644 --- a/util/database.py +++ b/util/database.py @@ -2,7 +2,7 @@ """ """ import pytz -import sqlite3 +import mysql.connector from datetime import datetime, timedelta @@ -15,8 +15,9 @@ class Database(): def __init__(self, config): self.config = config self.co2_mult = self.config.get_co2_avoidance_factor() - self.db = sqlite3.connect(self.config.get_database_path(), check_same_thread=False) - self.c = self.db.cursor() + self.db = mysql.connector.connect(host=self.config.config["database"]["mysql"]["host"], user=self.config.config["database"]["mysql"]["username"], passwd=self.config.config["database"]["mysql"]["password"], database=self.config.config["database"]["mysql"]["database"]) + + self.c = self.db.cursor(buffered=True) self.local_timezone = self.get_local_timezone() global hasRun @@ -110,12 +111,13 @@ def get_requested_day(self, date): query = ''' SELECT TimeStamp, SUM(Power) AS Power FROM DayData - WHERE TimeStamp BETWEEN ? AND ? + WHERE TimeStamp BETWEEN %s AND %s GROUP BY TimeStamp; ''' data['data'] = list() - for row in self.c.execute(query, (day_start, day_end)): + self.c.execute(query, (day_start, day_end)) + for row in self.c.fetchall(): data['data'].append({ 'time': row[0], 'power': row[1] }) @@ -129,7 +131,7 @@ def get_requested_day(self, date): query = ''' SELECT SUM(DayYield) AS Power FROM MonthData - WHERE TimeStamp BETWEEN ? AND ? + WHERE TimeStamp BETWEEN %s AND %s GROUP BY TimeStamp; ''' self.c.execute(query, (day_start, day_end)) @@ -141,7 +143,7 @@ def get_requested_day(self, date): query = ''' SELECT MIN(TimeStamp) as Min, MAX(TimeStamp) as Max - FROM ( SELECT TimeStamp FROM DayData GROUP BY TimeStamp ); + FROM ( SELECT TimeStamp FROM DayData GROUP BY TimeStamp ) as data; ''' self.c.execute(query) @@ -165,25 +167,26 @@ def get_requested_day_for_inverter(self, inverter_serial, date): query = ''' SELECT TimeStamp, Power FROM DayData - WHERE TimeStamp BETWEEN ? AND ? AND Serial=?; + WHERE TimeStamp BETWEEN %s AND %s AND Serial=%s; ''' data['data'] = list() - for row in self.c.execute(query, (day_start, day_end, inverter_serial)): + self.c.execute(query, (day_start, day_end, inverter_serial)) + for row in self.c.fetchall(): data['data'].append({'time': row[0], 'power': row[1]}) if self.get_datetime(date).date() == datetime.today().date(): query = ''' SELECT EToday FROM Inverters - WHERE Serial=?; + WHERE Serial=%s; ''' self.c.execute(query, (inverter_serial,)) else: query = ''' SELECT DayYield AS Power FROM MonthData - WHERE TimeStamp BETWEEN ? AND ? AND Serial=?; + WHERE TimeStamp BETWEEN %s AND %s AND Serial=%s; ''' self.c.execute(query, (day_start, day_end, inverter_serial)) @@ -193,7 +196,7 @@ def get_requested_day_for_inverter(self, inverter_serial, date): query = ''' SELECT MIN(TimeStamp) as Min, MAX(TimeStamp) as Max - FROM ( SELECT TimeStamp FROM DayData WHERE Serial=? ); + FROM ( SELECT TimeStamp FROM DayData WHERE Serial=%s ) as data; ''' self.c.execute(query, (inverter_serial,)) @@ -218,12 +221,13 @@ def get_requested_month(self, date): query = ''' SELECT TimeStamp, SUM(DayYield) AS Power FROM MonthData - WHERE TimeStamp BETWEEN ? AND ? + WHERE TimeStamp BETWEEN %s AND %s GROUP BY TimeStamp; ''' data['data'] = list() - for row in self.c.execute(query, (month_start, month_end)): + self.c.execute(query, (month_start, month_end)) + for row in self.c.fetchall(): data['data'].append({'time': self.convert_local_ts_to_utc(row[0], self.local_timezone), 'power': row[1]}) month_total += row[1] @@ -236,7 +240,7 @@ def get_requested_month(self, date): query = ''' SELECT MIN(TimeStamp) as Min, MAX(TimeStamp) as Max - FROM ( SELECT TimeStamp FROM MonthData GROUP BY TimeStamp ); + FROM ( SELECT TimeStamp FROM MonthData GROUP BY TimeStamp ) as data; ''' self.c.execute(query) @@ -259,11 +263,12 @@ def get_requested_month_for_inverter(self, inverter_serial, date): query = ''' SELECT TimeStamp, DayYield AS Power FROM MonthData - WHERE TimeStamp BETWEEN ? AND ? AND Serial=?; + WHERE TimeStamp BETWEEN %s AND %s AND Serial=%s; ''' data['data'] = list() - for row in self.c.execute(query, (month_start, month_end, inverter_serial)): + self.c.execute(query, (month_start, month_end, inverter_serial)) + for row in self.c.fetchall(): data['data'].append({'time': self.convert_local_ts_to_utc(row[0], self.local_timezone), 'power': row[1]}) month_total += row[1] @@ -277,7 +282,7 @@ def get_requested_month_for_inverter(self, inverter_serial, date): query = ''' SELECT MIN(TimeStamp) as Min, MAX(TimeStamp) as Max FROM MonthData - WHERE Serial=?; + WHERE Serial=%s; ''' self.c.execute(query, (inverter_serial,)) @@ -302,7 +307,7 @@ def get_requested_year(self, date): query = ''' SELECT SUM(DayYield) AS Power FROM MonthData - WHERE TimeStamp BETWEEN ? AND ?; + WHERE TimeStamp BETWEEN %s AND %s; ''' current_month_start = year_start @@ -332,7 +337,7 @@ def get_requested_year(self, date): query = ''' SELECT MIN(TimeStamp) as Min, MAX(TimeStamp) as Max - FROM ( SELECT TimeStamp FROM MonthData GROUP BY TimeStamp ); + FROM ( SELECT TimeStamp FROM MonthData GROUP BY TimeStamp ) as data; ''' self.c.execute(query) @@ -357,7 +362,7 @@ def get_requested_year_for_inverter(self, inverter_serial, date): query = ''' SELECT SUM(DayYield) AS Power FROM MonthData - WHERE TimeStamp BETWEEN ? AND ? AND Serial=?; + WHERE TimeStamp BETWEEN %s AND %s AND Serial=%s; ''' current_month_start = year_start @@ -386,7 +391,7 @@ def get_requested_year_for_inverter(self, inverter_serial, date): query = ''' SELECT MIN(TimeStamp) as Min, MAX(TimeStamp) as Max - FROM ( SELECT TimeStamp FROM MonthData WHERE Serial=? GROUP BY TimeStamp ); + FROM ( SELECT TimeStamp FROM MonthData WHERE Serial=%s GROUP BY TimeStamp ) as data; ''' self.c.execute(query, (inverter_serial,)) @@ -444,7 +449,8 @@ def get_inverters(self): ''' invs = [] renamings = self.config.get_renamings() - for row in self.c.execute(query): + self.c.execute(query) + for row in self.c.fetchall(): serial = str(row[0]) if serial == "0": @@ -496,7 +502,7 @@ def get_epoch_year(self, date): def get_epoch_tot(self): query = ''' SELECT MIN(TimeStamp) as Min, MAX(TimeStamp) as Max - FROM ( SELECT TimeStamp FROM MonthData GROUP BY TimeStamp ); + FROM ( SELECT TimeStamp FROM MonthData GROUP BY TimeStamp ) as data; ''' self.c.execute(query) @@ -504,7 +510,7 @@ def get_epoch_tot(self): query = ''' SELECT MIN(TimeStamp) as Min, MAX(TimeStamp) as Max - FROM ( SELECT TimeStamp FROM DayData GROUP BY TimeStamp ); + FROM ( SELECT TimeStamp FROM DayData GROUP BY TimeStamp ) as data; ''' self.c.execute(query) From 04989dbecd8c847c98517f40d3d5b412d34d2763 Mon Sep 17 00:00:00 2001 From: brainkiller Date: Sun, 26 Apr 2020 20:59:05 +0200 Subject: [PATCH 2/2] Updated config to list mysql config values --- config.default.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/config.default.yml b/config.default.yml index a9b7777..fc906b3 100644 --- a/config.default.yml +++ b/config.default.yml @@ -1,6 +1,10 @@ --- database: - path: "/home/pi/smadata/SBFspot.db" + mysql: + host: + username: + password: + database: co2_avoidance_factor: 0.7 mail: enabled: 'false'