Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何表示嵌套文件夹&;Sqlite数据库中的子文件夹结构?_Python_Database_Sqlite - Fatal编程技术网

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表示这种嵌套,因为简

我想用Python表示Sqlite数据库中的文件夹结构,其中每个表的行为都像它自己的文件夹,可以是另一个表的父、子或同级

我当前的设置将它们与分隔符嵌套,如下所示:

  • ['folder::subfoldera']
  • ['folder::subfolderb']
  • ['folder2::子文件夹C']
  • ['folder2::子文件夹']
  • ['last::example::to::Representation::depth']
但是,当我从数据库中读取时,我不知道如何用python表示这种嵌套,因为简单的嵌套列表不起作用,因为它无法保留文件夹的名称,它只会显示嵌套在其中的内容


我应该如何处理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中。下次,它将返回存储在变量中的日期