Graphene_sqlalchemy и flask-sqlalchemy расходятся во мнениях относительно того, что представляет собой действительную модель SQLAlchemy? - PullRequest
0 голосов
/ 28 октября 2018

Играю с Колбой, Графеном и сталкиваюсь с проблемой.Учтите следующее.

Модель проектапланирую выставить API GraphQL (project.schemas.schema))

from graphene_sqlalchemy import SQLAlchemyConnectionField
import graphene
from project.schemas import site_schema, trade_schema, user_schema

class Query(graphene.ObjectType):
    """Query objects for GraphQL API."""

    node = graphene.relay.Node.Field()
    user = graphene.relay.Node.Field(user_schema.User)
    userList = SQLAlchemyConnectionField(user_schema.User)
    site = graphene.relay.Node.Field(site_schema.Site)
    siteList = SQLAlchemyConnectionField(site_schema.Site)
    trade = graphene.relay.Node.Field(trade_schema.Trade)
    tradeList = SQLAlchemyConnectionField(trade_schema.Trade)


schema = graphene.Schema(query=Query)

Если я загружу модель как таковую при запуске, все хорошо.Миграции случаются, приложение работает отлично.Если я загружаю модель через схему, хотя приложение завершается ошибкой со следующим сообщением:

AssertionError: You need to pass a valid SQLAlchemy Model in Site.Meta, received "<module 'project.models.site' from '/vagrant/src/project/models/site.py'>".

Я инициализировал SQLAlchemy с flask_sqlalchemy.Что заставляет меня задуматься, не является ли созданная модель действительной моделью SQLAlchemy?Или я делаю здесь основную ошибку, которую просто не вижу.Я предполагаю, что это последнее.

Ответы [ 2 ]

0 голосов
/ 28 октября 2018

Итак, исправление пакетов в классах, наконец, привело меня в правильное русло.Оказывается, проблема была глубже, чем это.И единственный способ добраться до него - это прочитать скрытые исключения.

Сначала я удостоверился, что загружены реальные модели, а не модули.Огромное спасибо за это @ jwodder

В конце концов, это https://github.com/graphql-python/graphene-sqlalchemy/issues/121 в конечном итоге указало мне в правильном направлении.Проверяя фактические сообщения об исключениях, я нашел путь к решению

0 голосов
/ 28 октября 2018

Судя по сообщению об ошибке, project.models.site (импортированный во втором фрагменте с from project.models import site as site_model) - это модуль Python, а не подкласс db.Model или аналогичный.Возможно, вы хотели импортировать Site (заглавные буквы) вместо site?

...