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()

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在BFS中创建接受用户输入的树   chef::Exception::RecipeNotFound找不到cookbook java的配方默认值   java for循环算法不更新变量   java如何启用以cookie为条件的按钮?   maven项目中的java获取错误:FirefoxDriver无法解析为类型   瓦丁不能铸造java。util。集合$EmptySet到java。util。哈希集   java视图页面未显示从控制器传递的数据   java数据输入流是否跳过字符?   java Basic SpringMVC+Tomcat问题   java JFreeChart为时间创建自定义值轴   用于实现toFindResult()的正则表达式Java Matcher类   java如何使用GridBagLayout维护jpanel的维度大小?   java如何将工作流部署到openkm?   JavaJSON:如何为未从列表中选择的变量赋值?