关于GraphQL无数据库使用及Python非MongoDB/SQL存储的技术问询
1. 是否可以在不将数据存储到数据库的情况下使用GraphQL?
当然可以。GraphQL本质是一套数据查询与操作规范,核心是通过定义Schema描述数据结构,再通过Resolver函数处理请求逻辑——它从设计上就不绑定任何数据库。
你可以从多种非数据库的数据源获取或生成数据:
- 返回内存中的静态硬编码数据(比如固定的列表、字典)
- 调用第三方API获取数据后返回
- 读写本地文件(JSON、CSV、甚至纯文本)
- 实时生成临时计算结果
举个极简的示例(以JavaScript为例,原理通用):
Schema定义:
type Query { greeting: String }
对应的Resolver直接返回字符串:
const resolvers = { Query: { greeting: () => "Hey there, no database needed!" } };
这段代码完全不需要数据库就能正常运行GraphQL服务。
2. 使用Python结合GraphQL时,能否不通过MongoDB或SQL来完成数据库的数据存储操作?
绝对可以。Python生态提供了大量非MongoDB、非SQL的存储方案,适合不同场景:
- 本地文件存储:用
json/csv模块读写文件,适合小型应用或低数据量场景 - 键值存储:通过
redis-py操作Redis,或使用内存型键值结构 - 替代文档数据库:比如CouchDB(用
couchdb库)、RethinkDB - Python原生对象存储:ZODB可以直接序列化存储Python对象,无需SQL或Mongo语法
- 轻量级数据库:比如
tinydb(支持内存/文件存储)、sqlite3的:memory:纯内存模式
下面是用Python的Ariadne框架结合JSON文件实现数据存储的示例:
首先定义GraphQL Schema:
type Query { users: [User] } type User { id: ID! name: String! } type Mutation { addUser(name: String!): User }
然后编写Resolver逻辑,通过JSON文件读写数据:
import json from ariadne import QueryType, MutationType, make_executable_schema, graphql_sync # 存储数据的JSON文件路径 DATA_FILE = "users.json" def load_users(): try: with open(DATA_FILE, "r") as f: return json.load(f) except FileNotFoundError: return [] def save_users(users): with open(DATA_FILE, "w") as f: json.dump(users, f) # 定义查询和变更处理器 query = QueryType() mutation = MutationType() @query.field("users") def resolve_users(*_): return load_users() @mutation.field("addUser") def resolve_add_user(_, info, name): users = load_users() new_user = {"id": str(len(users) + 1), "name": name} users.append(new_user) save_users(users) return new_user # 生成可执行Schema schema = make_executable_schema(""" type Query { users: [User] } type User { id: ID! name: String! } type Mutation { addUser(name: String!): User } """, [query, mutation]) # 测试查询 result = graphql_sync(schema, {"query": "{ users { id name } }"}) print(result.data)
这个例子完全不依赖MongoDB或SQL,仅通过JSON文件完成数据的持久化存储。
内容的提问来源于stack exchange,提问作者Serge
相关产品推荐
相关产品推荐

