From 6cf260b6e37f328e544b99ad5982cabd6269cdf3 Mon Sep 17 00:00:00 2001 From: jay817 Date: Thu, 26 Sep 2024 00:54:51 -0400 Subject: [PATCH] Add sqlite3/Files/README.md --- sqlite3/Files/README.md | 49 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 sqlite3/Files/README.md diff --git a/sqlite3/Files/README.md b/sqlite3/Files/README.md new file mode 100644 index 0000000..7deaaa6 --- /dev/null +++ b/sqlite3/Files/README.md @@ -0,0 +1,49 @@ +``` +import sqlite3, pandas as pd + +class Files: + def __init__(self, db='files.sqlite'): + self.conn = sqlite3.connect(db, isolation_level=None) + self.conn.row_factory = sqlite3.Row + self('PRAGMA journal_mode=WAL') + self('CREATE TABLE IF NOT EXISTS files (filename TEXT PRIMARY KEY, content BLOB)') + + def __call__(self, *args) -> pd.DataFrame: + return pd.DataFrame(dict(row) for row in self.conn.execute(*args)) + + def __setitem__(self, filename, content) -> None: + assert isinstance(filename, str) + if isinstance(content, str): content = content.encode() + assert isinstance(content, bytes) + self('INSERT OR REPLACE INTO files VALUES (?,?)', (filename, content)) + + def __getitem__(self, filename) -> bytes: + return self('SELECT content FROM files WHERE filename=?', (filename,)).content[0] + + def __delitem__(self, filename) -> None: + self('DELETE FROM files WHERE filename=?', (filename,)) + + def __iter__(self): + df = self('SELECT filename FROM files') + return iter([] if df.empty else df.filename) + + def __contains__(self, filename: str) -> bool: + return not self('SELECT 1 FROM files WHERE filename=?', (filename,)).empty + + def __len__(self) -> int: + return self('SELECT COUNT(*) FROM files').iloc[0, 0] + +files = Files() +for filename in files: + print(files[filename]) +files['hello'] = 'world' +print(files['hello']) +print(len(files)) +print('hello' in files) +for filename in files: + print(filename) + +del files['hello'] +for filename in files: + print(filename) +``` \ No newline at end of file