summaryrefslogtreecommitdiff
path: root/opendc/util/database.py
diff options
context:
space:
mode:
Diffstat (limited to 'opendc/util/database.py')
-rw-r--r--opendc/util/database.py82
1 files changed, 82 insertions, 0 deletions
diff --git a/opendc/util/database.py b/opendc/util/database.py
new file mode 100644
index 00000000..16fff5f0
--- /dev/null
+++ b/opendc/util/database.py
@@ -0,0 +1,82 @@
+from datetime import datetime
+import json
+import sqlite3
+
+# Get keys from config file
+with open('/var/www/opendc.ewi.tudelft.nl/web-server/config/keys.json') as file:
+ KEYS = json.load(file)
+
+DATETIME_STRING_FORMAT = '%Y-%m-%dT%H:%M:%S'
+
+def execute(statement, t):
+ """Open a database connection and execute the statement."""
+
+ # Connect to the database
+ connection = sqlite3.connect(KEYS['DATABASE_LOCATION'])
+ cursor = connection.cursor()
+
+ # Turn on foreign key checks
+ cursor.execute('pragma foreign_keys=ON')
+
+ # Execute the statement
+ cursor.execute(statement, t)
+
+ # Get the id
+ database_id = cursor.execute('SELECT last_insert_rowid()').fetchone()[0]
+
+ # Disconnect from the database
+ connection.commit()
+ connection.close()
+
+ # Return the id
+ return database_id
+
+def fetchone(statement, t=None):
+ """Open a database connection and return the first row matched by the SELECT statement."""
+
+ # Connect to the database
+ connection = sqlite3.connect(KEYS['DATABASE_LOCATION'])
+ cursor = connection.cursor()
+
+ # Execute the SELECT statement
+
+ if t is not None:
+ cursor.execute(statement, t)
+ else:
+ cursor.execute(statement)
+
+ value = cursor.fetchone()
+
+ # Disconnect from the database and return
+ connection.close()
+ return value
+
+def fetchall(statement, t=None):
+ """Open a database connection and return all rows matched by the SELECT statement."""
+
+ # Connect to the database
+ connection = sqlite3.connect(KEYS['DATABASE_LOCATION'])
+ cursor = connection.cursor()
+
+ # Execute the SELECT statement
+
+ if t is not None:
+ cursor.execute(statement, t)
+ else:
+ cursor.execute(statement)
+
+ values = cursor.fetchall()
+
+ # Disconnect from the database and return
+ connection.close()
+ return values
+
+def datetime_to_string(datetime_to_convert):
+ """Return a database-compatible string representation of the given datetime object."""
+
+ return datetime_to_convert.strftime(DATETIME_STRING_FORMAT)
+
+def string_to_datetime(string_to_convert):
+ """Return a datetime corresponding to the given string representation."""
+
+ return datetime.strptime(string_to_convert, DATETIME_STRING_FORMAT)