From 15525a7838265c81220077015e6188c5071d2e0c Mon Sep 17 00:00:00 2001 From: jay817 Date: Fri, 23 Aug 2024 07:52:07 -0400 Subject: [PATCH] Add sqlite3/README.md --- sqlite3/README.md | 78 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 sqlite3/README.md diff --git a/sqlite3/README.md b/sqlite3/README.md new file mode 100644 index 0000000..5425226 --- /dev/null +++ b/sqlite3/README.md @@ -0,0 +1,78 @@ +## Better Python interface for `sqlite3` + +```python +import sqlite3, json + +class DB(sqlite3.Connection): + def __init__(self, db_name="db.sqlite"): + super().__init__(db_name) + with self: + self.execute(''' + CREATE TABLE IF NOT EXISTS kv_store + (key TEXT PRIMARY KEY, value BLOB) + ''') + + def __setitem__(self, key, value): + if not isinstance(value, bytes): + value = json.dumps(value) + with self: + cur = self.execute(''' + INSERT OR REPLACE INTO kv_store + (key, value) VALUES (?, ?) + ''', (key, value)) + return {"modified_count": cur.rowcount} + + def __getitem__(self, key): + with self: + result = self.execute(''' + SELECT value FROM kv_store + WHERE key = ? + ''', (key,)).fetchone() + if result: + if isinstance(result[0], str): + try: return json.loads(result[0]) + except: pass + return result[0] + + def delete(self, key): + with self: + cur = self.execute(''' + DELETE FROM kv_store WHERE key = ? + ''', (key,)) + return {"deleted_count": cur.rowcount} + + + def keys(self, pattern='*'): + pattern = pattern.translate(str.maketrans({ + '\\': '\\\\', '%': '\\%', '_': '\\_', '*': '%', '?': '_' + })) + + with self: + cur = self.execute(''' + SELECT key FROM kv_store + WHERE key LIKE ? ESCAPE '\\' + ''', (pattern,)) + return [row[0] for row in cur.fetchall()] +``` +# Usage +```python +db = DB() + +# 문자열 저장 및 조회 +db['hello'] = 'world' +print(db['hello']) # 출력: world (str 타입) + +# 숫자 저장 및 조회 +db['number'] = 42 +print(db['number']) # 출력: 42 (int 타입) + +# 바이너리 데이터 저장 및 조회 +db['binary'] = b'binary data' +print(db['binary']) # 출력: b'binary data' (bytes 타입) + +# 복잡한 객체 저장 +complex_obj = {'name': 'John', 'age': 30, 'city': 'New York'} +db['complex'] = complex_obj +loaded_obj = db['complex'] +print(loaded_obj) # 출력: {'name': 'John', 'age': 30, 'city': 'New York'} (dict 타입) +``` \ No newline at end of file