簡體   English   中英

Graphene / GraphQL查找特定的列值

[英]Graphene/GraphQL find specific column value

由於某些原因,我無法弄清楚如何在我的SQLAlchemy數據庫中簡單地查找特定的數據。

graphene-python文檔中,它只是簡單地執行此查詢以匹配id(它是一個字符串):

book(id: "Qm9vazow") {
    id
    title
}

現在,這是我的BookSchema的Flask-Graphene-SQLAlchemy代碼,我想找到一個特定的標題而不是ID:

class BookModel(db.Model):
    __table__ = db.Model.metadata.tables['books_book']

# Schema Object
class BookSchema(SQLAlchemyObjectType):
    class Meta:
        model = BookModel
        interfaces = (relay.Node, )

# Connection
class BookConnection(relay.Connection):
    class Meta:
        node = BookSchema

# GraphQL query
class Query(graphene.ObjectType):
    node = relay.Node.Field()
    allBooks = SQLAlchemyConnectionField(BookConnection)


schema = graphene.Schema(query=Query, types=[BookSchema])

當我運行此查詢時,一切都很好,並返回3個書名:

{
    "query": "{ allBooks(first: 3) { edges { node { title } } } }"
}

但是,一旦我嘗試匹配特定的標題,它將停止工作。 例如:

# I tried all these queries, none worked
1. { allBooks(title: \"some book title\") { edges { node { title } } } }
2. { allBooks(title: \"some book title\") { title }
3. { allBooks(title: 'some book title') { edges { node { title } } } }

錯誤: "Unknown argument \\"title\\" on field \\"allBooks\\" of type \\"Query\\"."

我必須犯一個我沒有看到的小錯誤,但我無法弄清楚。 我花了幾個小時試圖弄清楚這一點。

問題:如何匹配標題並使它返回對象? 我究竟做錯了什么?

弄清楚了! 請參閱下面的更改。

class Query(graphene.ObjectType):
    node = relay.Node.Field()
    all_books = SQLAlchemyConnectionField(BookConnection)

    # Added this
    find_book = graphene.Field(BookSchema, title = graphene.String())

    def resolve_find_book(self, info, title):
      query = BookSchema.get_query(info)
      return query.filter(BookModel.title == title).first()

我的GraphQL查詢看起來像這樣:

{
    "query": "{ findBook(title: \"some book title\") { title } }"
}

希望這對以后的人有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM