Graphene_sqlalchemy和flasksqlalchemy在什么构成有效的sqlalchemy模型上存在分歧?

2024-09-26 23:17:19 发布

您现在位置:Python中文网/ 问答频道 /正文

玩烧瓶,石墨烯和我遇到了一个问题。考虑以下几点。在

模型项目.模型.场地公司名称:

from project import db
from project.models import user
from datetime import datetime

class Site(db.Model):
    __tablename__ = 'sites'
    id = db.Column(db.Integer(), primary_key=True)
    owner_id = db.Column(db.Integer, db.ForeignKey('users.id'))
    name = db.Column(db.String(50))
    desc = db.Column(db.Text())
    location_lon = db.Column(db.String(50))
    location_lat = db.Column(db.String(50))
    creation_date = db.Column(db.DateTime(), default=datetime.utcnow())
    users = db.relationship(
        user,
        backref=db.backref('users',
                        uselist=True,
                        cascade='delete,all'))

模型模式(project.schemas.site_模式)在

^{pr2}$

最后是我计划公开graphqlapi的主模式(项目.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'>".

我用flask_SQLAlchemy初始化了SQLAlchemy。这让我想知道,创建的模型是否被视为有效的SQLAlchemy模型?我在这不是一个基本的错误。我想是后者。在


Tags: from模型importprojectnodedbschemasite
2条回答

因此,将包修复到类中最终使我走上了正确的方向。事实证明,问题比那更严重。唯一的办法就是阅读隐藏的异常。在

首先,我确保实际的模型加载,而不是模块。非常感谢你的一个@jwodder

最后这个https://github.com/graphql-python/graphene-sqlalchemy/issues/121最终指向了我正确的方向。通过检查实际的异常消息,我找到了解决方案

根据错误消息,project.models.site(在第二个片段中用from project.models import site as site_model导入)似乎是一个Python模块,而不是{}或类似的子类。您是不是想导入Site(大写)而不是{}?在

相关问题 更多 >

    热门问题