Python 如何表示嵌套文件夹&;Sqlite数据库中的子文件夹结构?
我想用Python表示Sqlite数据库中的文件夹结构,其中每个表的行为都像它自己的文件夹,可以是另一个表的父、子或同级 我当前的设置将它们与分隔符嵌套,如下所示:Python 如何表示嵌套文件夹&;Sqlite数据库中的子文件夹结构?,python,database,sqlite,Python,Database,Sqlite,我想用Python表示Sqlite数据库中的文件夹结构,其中每个表的行为都像它自己的文件夹,可以是另一个表的父、子或同级 我当前的设置将它们与分隔符嵌套,如下所示: ['folder::subfoldera'] ['folder::subfolderb'] ['folder2::子文件夹C'] ['folder2::子文件夹'] ['last::example::to::Representation::depth'] 但是,当我从数据库中读取时,我不知道如何用python表示这种嵌套,因为简
- ['folder::subfoldera']
- ['folder::subfolderb']
- ['folder2::子文件夹C']
- ['folder2::子文件夹']
- ['last::example::to::Representation::depth']
我应该如何处理a)在数据库中存储表b)在Python中表示表的结构?最好将文件夹结构存储在单个表中,而不是为每个文件夹创建一个表 例如,这样的表可以具有如下结构:
╔═══════════╦══════╦══════════════════════════════════╗
║ 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,在这种情况下,您的文件夹将表示为一个类,实现模型:
类文件夹(db.Model):
id=db.Column(db.Integer,主键=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值的功能也可以放在这个类中 最好将文件夹结构存储在一个表中,而不是为每个文件夹创建一个表 例如,这样的表可以具有如下结构:
╔═══════════╦══════╦══════════════════════════════════╗
║ 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,在这种情况下,您的文件夹将表示为一个类,实现模型:
类文件夹(db.Model):
id=db.Column(db.Integer,主键=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值的功能也可以放在这个类中 你可以找到一个好的。注意各种方法的优缺点。它将帮助你在选择一个选项之前澄清你需要考虑的问题。注意各种方法的优缺点。它将帮助您澄清在选择选项之前需要考虑的问题。这正是我所寻找的-我实际上已经切换到使用sqlalchemy作为我的ORM并实现了该结构。我该如何在内存中缓存结构呢?例如,您可以在文件夹模型类中创建一个
@staticmethod getStructure
函数,以及一个类变量\u structure\u cache
,用于存储“缓存”的模型列表。当方法第一次被调用时,它应该查询数据库中的模型,并将它们存储在_structure_cache中。下一次,它将返回存储在variable中的日期,这正是我所要寻找的-实际上,我已经切换到使用sqlalchemy作为我的ORM并实现了该结构。我该如何在内存中缓存结构呢?例如,您可以在文件夹模型类中创建一个@staticmethod getStructure
函数,以及一个类变量\u structure\u cache
,用于存储“缓存”的模型列表。当方法第一次被调用时,它应该查询数据库中的模型,并将它们存储在_structure_cache中。下次,它将返回存储在变量中的日期