47 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import os
 | |
| import psycopg2
 | |
| 
 | |
| 
 | |
| DB_ADDRESS = os.getenv('DB_ADDRESS', 'localhost')
 | |
| DB_PORT = os.getenv('DB_PORT', 5432)
 | |
| DB_USER = os.getenv('DB_USER', 'postgres')
 | |
| DB_PASSWORD = os.getenv('DB_PASSWORD', '')
 | |
| DB_NAME = os.getenv('DB_NAME', 'postgres')
 | |
| 
 | |
| 
 | |
| class DBConnector:
 | |
|     """Context managed database class. Use with statements to automatically open and close the database connection, like
 | |
|     so:
 | |
| 
 | |
|     .. code-block:: python
 | |
|        with DBConnector() as db:
 | |
|            db.read()
 | |
|     """
 | |
|     def __enter__(self):
 | |
|         self.conn = psycopg2.connect()
 | |
|         self.cur = self.conn.cursor()
 | |
| 
 | |
|     def __exit__(self):
 | |
|         self.cur.close()
 | |
|         self.conn.close()
 | |
| 
 | |
|     def _query(self, sql):
 | |
|         try:
 | |
|             self.cur.execute(sql)
 | |
|             result = self.cur.fetchall()
 | |
|         except psycopg2.DatabaseError as e:
 | |
|             result = []
 | |
|         return result
 | |
| 
 | |
|     def read(self, **kwargs):
 | |
|         """Read rows from a database that match the specified filters.
 | |
| 
 | |
|         :param kwargs: Column constraints; i.e. what value to filter by in what column.
 | |
|         :returns: A list of dictionaries of all matching rows, or an empty list if no match."""
 | |
|         pass
 | |
| 
 | |
|     def write(self, **kwargs):
 | |
|         """Write a row to the database.
 | |
| 
 | |
|         :param kwargs: Values to write for each database; specify each column separately!"""
 | |
|         pass |