Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sqlite3
- import logging
- import os.path
- from time import strftime
- class SqliteCache:
- def __init__(self, database_name='cache.sqlite3', logger=None):
- self._logger = logger or logging.getLogger(__name__)
- self._database_name = database_name
- self._ensure_db_exists()
- def _ensure_db_exists(self):
- if not os.path.exists(self._database_name):
- with Cursor(self._database_name) as cursor:
- cursor.execute('''CREATE TABLE cache (key TEXT PRIMARY KEY, value TEXT, date TEXT)''')
- def exists(self, key):
- with Cursor(self._database_name) as cursor:
- cursor.execute("""SELECT key FROM cache WHERE key=?""", (key,))
- return cursor.fetchone() is not None
- def get(self, key):
- self._logger.debug("Fetching value '{0}' from cache".format(key))
- with Cursor(self._database_name) as cursor:
- cursor.execute("""SELECT value FROM cache WHERE key=?""", (key,))
- c = cursor.fetchone()
- return None if not c else c[0]
- def cache(self, key, value):
- if self.exists(key):
- self._logger.debug("The key '{0}' already exists in the cache".format(key))
- return
- self._logger.debug("Caching value with key {0}".format(key))
- with Cursor(self._database_name) as cursor:
- date = strftime("%Y-%m-%d %H:%M:%S")
- cursor.execute('''INSERT INTO cache VALUES (?, ?, ?)''', (key, value, date))
- class Cursor:
- def __init__(self, database_name):
- self._database_name = database_name
- def __enter__(self):
- self.conn = sqlite3.connect(self._database_name)
- cursor = self.conn.cursor()
- return cursor
- def __exit__(self, type, value, traceback):
- self.conn.commit()
- self.conn.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement