norman是python中高级数据结构的框架,使用类似于数据库的方法。潜在的应用范围很广,例如在内存数据库、多键词典或节点图中。
norman的Python项目详细描述
norman为使用 类似数据库的方法。潜在应用范围广, 例如内存数据库、多键词典或节点图。 这些应用程序在下面的示例中进行了说明。
数据库
这是一个用于个人库的小型数据库:
db = Database() @db.add class Book(Table): name = Field(unique=True) author = Field(index=True) def validate(self): assert isinstance(self.name, str) assert isinstance(self.author, Author) @db.add class Author(Table): surname = Field(unique=True) initials = Field(unique=True, default='') nationality = Field() books = Join(Book.author)
多键词典
此表可用作带三个键的词典:
class MultiDict(Table): key1 = Field(unique=True) key2 = Field(unique=True) key3 = Field(unique=True) value = Field()
可通过以下方式添加值:
MultiDict(key1=4, key2='abc', key3=0, value='efg')
查询人:
for m in (MultiDict.key1 == 4 & Multidict.key2 == 'abc'): print(m.value)
节点图
这是一个图,其中每个节点可以有许多父节点和许多 子节点:
class Link(Table): """ Directional connections between nodes. """ parent = Field(unique=True) child = Field(unique=True) def validate(self): assert isinstance(self.parent, Node) assert isinstance(self.child, Node) class Node(Table): """ Nodes in the graph. """ parents = Join(query=lambda n: (Link.child == n).field('parent')) children = Join(query=lambda n: (Link.parent == n).field('child')) def validate_delete(self): # Delete all connecting links if a node is deleted (Link.parent == self).delete() (Link.child == self).delete()