我试图在使用SQL ALCHEMY声明的用户模型上执行变异.
这是我的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'))
这是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])
当我尝试执行以下变异时,这是我得到的错误:
--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
}
}
最佳答案 您正在尝试使用错误的类创建用户.当你调用User行时,你的意思是UserModel(name = args.get(‘name’))
错误是正确的,因为未映射SQLAlchemyObjectType用户,您导入为UserModel的模型用户是.