Будет лучше хранить структуру папок в одной таблице, а не создавать таблицу для каждой папки.
Например, такая таблица может иметь такую структуру:
╔═══════════╦══════╦══════════════════════════════════╗
║ Column ║ Type ║ Description ║
╠═══════════╬══════╬══════════════════════════════════╣
║ id ║ int ║ Unique identifier of the folder ║
║ parent_id ║ int ║ id of the parent folder ║
║ name ║ text ║ Name of the folder ║
║ mpath ║ text ║ Materialized path of parent id's ║
╚═══════════╩══════╩══════════════════════════════════╝
Примечание о материализованном пути: это необязательно и может быть добавлено, чтобы ускорить выполнение запросов типа «Получить всех детей».папки 123 "без рекурсивных вызовов.
Итак, давайте представим, что у вас есть такая структура папок:
/
├── home/
│ ├── aspiring-master
│ │ └── .bashrc
│ └── guest-user
└── var/
├── log/
└── lib/
Она может быть представлена в виде упомянутой таблицы следующим образом:
╔════╦═══════════╦═══════════════════╦═══════════╗
║ id ║ parent_id ║ name ║ mpath ║
╠════╬═══════════╬═══════════════════╬═══════════╣
║ 1 ║ null ║ "/" ║ "/" ║
║ 2 ║ 1 ║ "home" ║ "/1/" ║
║ 3 ║ 2 ║ "aspiring-master" ║ "/1/2/" ║
║ 4 ║ 3 ║ ".bashrc" ║ "/1/2/3/" ║
║ 5 ║ 2 ║ "guest-user" ║ "/1/2/" ║
║ 6 ║ 1 ║ "var" ║ "/1/" ║
║ 7 ║ 6 ║ "log" ║ "/1/6/" ║
║ 8 ║ 6 ║ "lib" ║ "/1/6/" ║
╚════╩═══════════╩═══════════════════╩═══════════╝
В python вы можете использовать некоторые ORM, такие как sqlAlchemy, и, в этом случае, ваша папка будет представлена как класс, реализующий Model:
class Folder(db.Model):
id = db.Column(db.Integer, primary_key=True)
parent_id = db.Column(db.Integer, db.ForeignKey('folder.id'),
nullable=True)
name = db.Column(db.String(128), unique=True, nullable=False)
mpath = db.Column(db.String(255), unique=True, nullable=False)
Функциональность для автоматического создания значения mpath.может быть помещен в этот класс.