我想我一定錯過了一些基本的東西,所以希望這將是一個簡單的修復。我已經用石墨烯和 SQLalchemy 設定了我的 graphql api,我可以從我的 Postgres 資料庫中回傳所有資料。但是,我不知道如何限制我的結果只回傳一條記錄。
這是我的架構物件:
class Dataset(SQLAlchemyObjectType):
class Meta:
model = DatasetModel
interfaces = (graphene.relay.Node, )
這是我的查詢:
class Query(graphene.ObjectType):
node = graphene.relay.Node.Field()
all_datasets = SQLAlchemyConnectionField(Dataset.connection)
schema = graphene.Schema(query=Query)
我需要添加/更改什么以允許我按欄位限制結果datasetName?
我嘗試添加以下功能:
def resolve_dataset(root, info, datasetName):
return db_session.query(Dataset).filter_by(datasetName=datasetName).first()
API 仍在運行,但是當我嘗試將搜索欄位添加到 graphql 查詢時,出現語法錯誤。我還嘗試添加該行:
Base.query = db_session.query_property()
按照檔案models.py的建議,對我來說,但這似乎沒有任何區別。
有人可以解釋我錯過了什么嗎?如何通過我提供給 api 的值來限制我的結果?
編輯:添加我在實施第一個建議的解決方案時遇到的資訊問題。
我將以下已決議函式添加到我的查詢類中:
def resolve_all_datasets(root, info, **kwargs):
query = db_session.query(Dataset)
if kwargs.get('datasetName'):
query=query.filter_by(datasetName=kwargs['datasetName'])
return query
然后使用以下查詢搜索我的 api 端點:
{allDatasets(datasetName:"MyDataset"){
edges{
node{
abstract
}
}
}
}
但得到:
{
"errors": [
{
"message": "Column expression or FROM clause expected, got <Dataset meta=<SQLAlchemyObjectTypeOptions name='Dataset'>>.",
"locations": [
{
"line": 2,
"column": 2
}
],
"path": [
"allDatasets"
]
}
],
"data": {
"allDatasets": null
}
}
uj5u.com熱心網友回復:
您應該定義resolve_all_datasets決議器而不是(我在您的架構resolve_dataset上看不到欄位)。dataset對于優雅的解決方案,您可以使用庫:https ://pypi.org/project/graphene-sqlalchemy-filter/
但是,您可以手動覆寫決議器:
class Query(graphene.ObjectType):
node = graphene.relay.Node.Field()
all_datasets = SQLAlchemyConnectionField(Dataset.connection, datasetName=graphene.String())
def resolve_all_datasets(root, info, **kwargs):
query = db_session.query(DatasetModel)
if kwargs.get('datasetName'):
query = query.filter_by(datasetName=kwargs['datasetName'])
return query
schema = graphene.Schema(query=Query)
僅回傳一個資料集的替代解決方案:
class Query(graphene.ObjectType):
node = graphene.relay.Node.Field()
dataset = graphene.Field(Dataset, datasetName=graphene.String(required=True))
def resolve_dataset(root, info, **kwargs):
return db_session.query(DatasetModel).filter_by(datasetName=kwargs['datasetName']).first()
schema = graphene.Schema(query=Query)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/491916.html
標籤:Python 烧瓶 sqlalchemy 图形
