# file to create a database via python script import sqlite3 class PlantDataBase: """ Class to create Makeathon database """ def __init__(self): self.db_file = 'backend_database.db' self.conn = None try: self.conn = sqlite3.connect(self.db_file, check_same_thread=False) print(sqlite3.version) except sqlite3.Error as e: print(e) self.cur = self.conn.cursor() def create_table(self): table_config = "CREATE TABLE IF NOT EXISTS plants " \ "(plant_ID INTEGER PRIMARY KEY AUTOINCREMENT," \ " gps TEXT," \ "plantName TEXT)" self.cur.execute(table_config) table_config = "CREATE TABLE IF NOT EXISTS measurement_values " \ "(measurement_id INTEGER PRIMARY KEY AUTOINCREMENT," \ "Timestamp DATETIME DEFAULT CURRENT_TIMESTAMP," \ "plant_ID INTEGER, " \ "sensordata_temp REAL," \ "sensordata_humidity REAL," \ "sensordata_soil_moisture REAL," \ "pest_infestation INTEGER," \ "light_intensity REAL," \ "FOREIGN KEY (plant_ID)" \ " REFERENCES plants (plant_ID) )" self.cur.execute(table_config) def insert_plant(self, _gps: str, plantname): self.cur.execute("INSERT INTO plants (gps, plantName) VALUES (?,?)", (_gps, plantname)) self.conn.commit() def insert_measurement_data(self, plant_id, sensordata_temp, sensordata_humidity, sensordata_soil_moisture, pest_infestation, light_intensity): self.cur.execute(f"INSERT INTO measurement_values (plant_ID, sensordata_temp, sensordata_humidity," f" sensordata_soil_moisture, pest_infestation, light_intensity) VALUES " f"({plant_id}, {sensordata_temp}, {sensordata_humidity}, {sensordata_soil_moisture}, {pest_infestation}" f", {light_intensity})") self.conn.commit() def get_latest_data(self, plant_id) -> dict: """ Gets the newest parameter of specific plant and returns all parameters in json format :param plant_id: :return: """ self.cur.execute(f"SELECT * FROM measurement_values where plant_ID = {plant_id} ORDER BY Timestamp DESC LIMIT 1") data = self.cur.fetchone() self.cur.execute(f"SELECT plantName FROM plants where plant_ID = {plant_id}") name = self.cur.fetchone() print(data) print(name[0]) json_file = { "MeasurementID": data[0], "PlantID": data[2], "Timestamp": data[1], "AirTemperature": data[3], "AirHumidity": data[4], "SoilMoisture": data[5], "Brightness": data[7], "PlantName": name } return json_file def delete_data(self, table_name): self.cur.execute(f"DELETE FROM {table_name}") self.conn.commit()