Update sqlite3/Files/README.md
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
```python
|
```python
|
||||||
|
# files.py
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
|
||||||
class Files:
|
class Files:
|
||||||
@@ -6,7 +7,7 @@ class Files:
|
|||||||
def __init__(self, db='files.sqlite'):
|
def __init__(self, db='files.sqlite'):
|
||||||
import sqlite3
|
import sqlite3
|
||||||
if not db.endswith('.sqlite'): db += '.sqlite'
|
if not db.endswith('.sqlite'): db += '.sqlite'
|
||||||
self.conn = sqlite3.connect(db, isolation_level=None)
|
self.conn = sqlite3.connect(db, isolation_level=None, timeout=60)
|
||||||
self.conn.row_factory = sqlite3.Row
|
self.conn.row_factory = sqlite3.Row
|
||||||
self("PRAGMA journal_mode=WAL")
|
self("PRAGMA journal_mode=WAL")
|
||||||
self("CREATE TABLE IF NOT EXISTS files (filename TEXT PRIMARY KEY, content BLOB)")
|
self("CREATE TABLE IF NOT EXISTS files (filename TEXT PRIMARY KEY, content BLOB)")
|
||||||
@@ -16,13 +17,14 @@ class Files:
|
|||||||
|
|
||||||
def __setitem__(self, filename, content) -> None:
|
def __setitem__(self, filename, content) -> None:
|
||||||
assert isinstance(filename, str)
|
assert isinstance(filename, str)
|
||||||
if isinstance(content, str):
|
if isinstance(content, str): content = content.encode()
|
||||||
content = content.encode()
|
|
||||||
assert isinstance(content, bytes)
|
assert isinstance(content, bytes)
|
||||||
self("INSERT OR REPLACE INTO files VALUES (?,?)", (filename, content))
|
self("INSERT OR REPLACE INTO files VALUES (?,?)", (filename, content))
|
||||||
|
|
||||||
def __getitem__(self, filename) -> bytes:
|
def __getitem__(self, filename) -> bytes:
|
||||||
return self("SELECT content FROM files WHERE filename=?", (filename,)).content[0]
|
result = self("SELECT content FROM files WHERE filename=?", (filename,))
|
||||||
|
if result.empty: raise KeyError(filename)
|
||||||
|
return result.content[0]
|
||||||
|
|
||||||
def __delitem__(self, filename) -> None:
|
def __delitem__(self, filename) -> None:
|
||||||
self("DELETE FROM files WHERE filename=?", (filename,))
|
self("DELETE FROM files WHERE filename=?", (filename,))
|
||||||
@@ -34,23 +36,36 @@ class Files:
|
|||||||
def __contains__(self, filename: str) -> bool:
|
def __contains__(self, filename: str) -> bool:
|
||||||
return not self("SELECT 1 FROM files WHERE filename=?", (filename,)).empty
|
return not self("SELECT 1 FROM files WHERE filename=?", (filename,)).empty
|
||||||
|
|
||||||
def __len__(self) -> int:
|
def __len__(self): return self("SELECT COUNT(*) FROM files").iloc[0, 0]
|
||||||
return self("SELECT COUNT(*) FROM files").iloc[0, 0]
|
def __enter__(self): return self
|
||||||
|
def __exit__(self, exc_type, exc_val, exc_tb): self.close()
|
||||||
|
def __del__(self): self.close()
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
if self.conn:
|
||||||
|
self('PRAGMA wal_checkpoint(FULL)')
|
||||||
|
self.conn.close()
|
||||||
|
self.conn = None
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
files = Files()
|
fs = Files()
|
||||||
for filename in files:
|
for filename in fs:
|
||||||
print(files[filename])
|
print(filename, fs[filename])
|
||||||
files['hello'] = 'world'
|
fs['hello'] = 'world'
|
||||||
print(files['hello'])
|
print(fs['hello'])
|
||||||
print(len(files))
|
print(len(fs))
|
||||||
print('hello' in files)
|
|
||||||
for filename in files:
|
print('hello' in fs)
|
||||||
|
for filename in fs:
|
||||||
print(filename)
|
print(filename)
|
||||||
|
|
||||||
del files['hello']
|
del fs['hello']
|
||||||
for filename in files:
|
for filename in fs:
|
||||||
print(filename)
|
print(filename)
|
||||||
|
|
||||||
|
with Files() as fs:
|
||||||
|
fs['world'] = '1234'
|
||||||
|
print(fs['world'])
|
||||||
|
print(len(fs))
|
||||||
|
|
||||||
```
|
```
|
||||||
Reference in New Issue
Block a user