A FUSE filesystem to allow reading a SQLite3 Database as a set of folders and files.
# Install fuse
sudo apt install -y fuse
# Install python dependencies
pip install --user fuse-python==1.0.9
pip install --user cachetools==5.5.2
# Mount a database at a mount_point
python sqlitedir.py <mount_point> -o db=<db.sqlite>
# Unmount the filesystem
fusermount -u <mount_point>The directory structure of the mounted directory looks like below. Each table in the database is represented as a directory at the root, within which each field (column) of the table is represented as a nested directory. Inside the directory corresponding to each field, files representing the distinct values of that field are shown.
├── table1
├── table2
└── table3
├── field1-of-table3
├── field2-of-table3
└── field3-of-table3
├── distinct-value1-of-field3-of-table3
├── distinct-value2-of-field3-of-table3
└── distinct-value3-of-field3-of-table3
Reading the files will return the rows in that table which matches with that field value. The data is returned as a JSON value.
cat mount/students/name/nihaal
# Equivalent to SELECT * FROM students WHERE name = 'nihaal'The filesystem is written only for reading data from a static (not changing) sqlite3 database. It uses caching and so if the database was modified while the script is executing, it may show an older view.