简体   繁体   English

石墨烯突变不映射SQL炼金术中的模型

[英]Graphene mutation not mapping Models in SQL Alchemy

I am trying to perform mutation on User models declared using SQL ALCHEMY. 我试图对使用SQL ALCHEMY声明的用户模型执行变异。 Here is the code for my models.py file 这是我的models.py文件的代码

# blog/models.py
from sqlalchemy import *
from sqlalchemy.orm import (scoped_session, sessionmaker, relationship,
                            backref)
from sqlalchemy.ext.declarative import declarative_base    
engine = create_engine('sqlite:///database.sqlite3', convert_unicode=True)
db_session = scoped_session(sessionmaker(autocommit=False,
                                         autoflush=False,
                                         bind=engine))
Base = declarative_base()
# We will need this for querying
Base.query = db_session.query_property()

class User(Base):
    __tablename__ = 'user'
    id = Column(Integer, primary_key= True)
    name = Column(String)
    email = Column(String)
    posts = relationship("Post", backref="user")

class Post(Base):
    __tablename__ = 'post'
    id = Column(Integer, primary_key= True)
    title = Column(String)
    text = Column(Text)
    user_id = Column(Integer, ForeignKey('user.id'))

This is Schema.py file 这是Schema.py文件

import graphene
from graphene import relay
from graphene_sqlalchemy import SQLAlchemyObjectType, SQLAlchemyConnectionField
from models import db_session,User as UserModel, Post as PostModel
from sqlalchemy import *

class User(SQLAlchemyObjectType):
    class Meta:
        model = UserModel
        interfaces = (relay.Node, )

class Post(SQLAlchemyObjectType):
    class Meta:
        model = PostModel
        interfaces = (relay.Node, )

class CreateUser(graphene.Mutation):
    class Input:
        name = graphene.String()

    ok = graphene.Boolean()
    user = graphene.Field(User)

    @classmethod
    def mutate(cls, instance, args, context, info):
        new_user = User(name=args.get('name'))

        db_session.add(new_user)
        db_session.commit()
        ok = True
        return CreateUser(user=new_user, ok=ok)

class Query(graphene.ObjectType):
    node = relay.Node.Field()
    user = relay.Node.Field(User)
    allUsers = SQLAlchemyConnectionField(User)

class MyMutations(graphene.ObjectType):
    create_user = CreateUser.Field()

schema = graphene.Schema(query=Query, mutation = MyMutations, types = [User, Post])

When i try performing following mutation, this is the error i get : 当我尝试执行以下突变时,这是我得到的错误:

--Query--
    mutation Test{
      createUser(name:"tess"){
        ok
        user{
          name
        }
      }
    }

    --Result--
    {
      "errors": [
        {
          "message": "Class 'schema2.User' is not mapped",
          "locations": [
            {
              "line": 2,
              "column": 3
            }
          ]
        }
      ],
      "data": {
        "createUser": null
      }
    }

You are trying to create a user with the wrong class. 您正在尝试使用错误的类创建用户。 It seems you meant UserModel when you are calling the line User(name=args.get('name')) 调用行User(name = args.get('name'))时,似乎是在说UserModel。

The error is correct in that the SQLAlchemyObjectType User is not mapped, the model User which you imported as UserModel is. 该错误是正确的,因为未映射SQLAlchemyObjectType用户,而导入了作为UserModel导入的模型User。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM