Я хочу извлечь строку 'Уникальные цепочки белков: 1' из этой записи, используя запрос graphQL.
Я знаю, что это запрос, который я хочу использовать:
{
entry(entry_id: "5O6C") {
rcsb_entry_info {
polymer_entity_count_protein
}
}
}
и я могу видеть вывод, если я использую интерфейс graphQL здесь :
{
"data": {
"entry": {
"rcsb_entry_info": {
"polymer_entity_count_protein": 1
}
}
}
}
Имеет информацию, которую я хочу: "Polymer_entity_count_protein": 1
Я хочу выполнить этот запрос через python, чтобы он мог быть передан в другие конвейеры (а также обработать несколько идентификаторов).
Я обнаружил, что графен - это одна библиотека, которая будет выполнять запросы GraphQL, и это Вот пример Hello World, который я могу получить на своей машине:
import graphene
class Query(graphene.ObjectType):
hello = graphene.String(name=graphene.String(default_value="world"))
def resolve_hello(self, info, name):
return name
schema = graphene.Schema(query=Query)
result = schema.execute('{ hello }')
print(result.data['hello']) # "Hello World"
Я не понимаю, как их объединить. Может кто-нибудь показать мне, как я редактирую свой код python с интересующим запросом, так что в конце напечатано:
'506C 1'
Я видел несколько других примеров / запросов о графене / graphQL: например, здесь ; за исключением того, что я не могу понять, как заставить мой конкретный c пример работать.
Основываясь на ответе ниже, я запустил:
графен импорта
class Query(graphene.ObjectType):
# ResponseType needs to be the type of your response
# the following line defines the return value of your query (ResponseType)
# and the inputType (graphene.String())
entry = graphene.String(entry_id=graphene.String(default_value=''))
def resolve_entry(self, info, **kwargs):
id = kwargs.get('entry_id')
# as you already have a working query you should enter the logic here
schema = graphene.Schema(query=Query)
# not totally sure if the query needs to look like this, it also depends heavily on your response type
query = '{ entry(entry_id="506C"){rcsb_entry_info}'
result = schema.execute(query)
print("506C" + str(result.data.entry.rcsb_entry_info.polymer_entity_count_protein))
Однако, Я получаю:
Traceback (most recent call last):
File "graphene_query_for_rcsb.py", line 18, in <module>
print("506C" + str(result.data.entry.rcsb_entry_info.polymer_entity_count_protein))
AttributeError: 'NoneType' object has no attribute 'entry'