跳转到主要内容

实现Graph APIs的库

项目描述

project documentation version tag license

Hiku是一个实现Graph APIs的库。包括必要的GraphQL支持。

安装

$ pip3 install hiku

通过发布候选版本频繁发布错误修复和新功能

$ pip3 install --upgrade --pre hiku

文档

阅读 文档

可选依赖项

  • graphql-core - 用于GraphQL支持

  • protobuf - 用于Protobuf支持

  • sqlalchemy - 作为数据源使用SQLAlchemy支持

  • aiopg - 使用 aiopg 提供异步PostgreSQL支持

  • asyncpg - 使用 asyncpg 提供异步PostgreSQL支持

  • prometheus-client - 提供Prometheus指标支持

  • sentry-sdk - 提供Sentry跟踪支持

亮点

  • 不耦合到特定的查询语言

  • 结果序列化具有灵活性,包括二进制格式

  • 原生使用规范化的结果表示,不重复数据

  • 支持所有并发模型:协程、线程

  • 并行查询执行

  • 客户端与服务器之间以及服务器与数据库之间无数据未取或超取

  • 设计上无N+1问题

  • 引入了“双层图”的概念,以解耦数据源和业务逻辑

快速示例

图定义

from hiku.graph import Graph, Root, Node, Field, Link
from hiku.types import String, Sequence, TypeRef

def characters_data(fields, ids):
    data = {
        1: {'name': 'James T. Kirk', 'species': 'Human'},
        2: {'name': 'Spock', 'species': 'Vulcan/Human'},
        3: {'name': 'Leonard McCoy', 'species': 'Human'},
    }
    return [[data[i][f.name] for f in fields] for i in ids]

def characters_link():
    return [1, 2, 3]

GRAPH = Graph([
    Node('Character', [
        Field('name', String, characters_data),
        Field('species', String, characters_data),
    ]),
    Root([
        Link('characters', Sequence[TypeRef['Character']],
             characters_link, requires=None),
    ]),
])

查询

from hiku.engine import Engine
from hiku.builder import Q, build
from hiku.executors.sync import SyncExecutor

engine = Engine(SyncExecutor())

result = engine.execute_query(GRAPH, build([
    Q.characters[
        Q.name,
        Q.species,
    ],
]))

# use result in your code
for character in result.characters:
    print(character.name, '-', character.species)

输出

James T. Kirk - Human
Spock - Vulcan/Human
Leonard McCoy - Human

贡献

使用Tox来测试和检查您的更改。

项目详情


发布历史 发布通知 | RSS源

下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

hiku-0.7.5.tar.gz (88.4 kB 查看哈希值)

上传时间 源代码

构建分发

hiku-0.7.5-py3-none-any.whl (113.8 kB 查看哈希值)

上传时间 Python 3

由以下机构支持