缺少药剂参数时出错。Python、Flask、Graphql
在创建用户时添加附加字段“datetime”时遇到问题。尽管CreateUser类中的设置required=False,但我自己尝试了大约一个小时来解决这个问题,但没有成功。放弃的感觉开始出现,所以我来这里寻求帮助缺少药剂参数时出错。Python、Flask、Graphql,python,flask,graphql,Python,Flask,Graphql,在创建用户时添加附加字段“datetime”时遇到问题。尽管CreateUser类中的设置required=False,但我自己尝试了大约一个小时来解决这个问题,但没有成功。放弃的感觉开始出现,所以我来这里寻求帮助 from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_graphql import GraphQLView import graphene from graphene_sqlalchemy
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_graphql import GraphQLView
import graphene
from graphene_sqlalchemy import SQLAlchemyObjectType, SQLAlchemyConnectionField
import bcrypt
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)
# Models
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password = db.Column(db.String(60), nullable=False)
joined = db.Column(db.DateTime, index=False, unique=False, nullable=False)
def __repr__(self):
return f'User("{self.username}" "{self.email}") "{self.password}")'
# Schema Objects
class UserObject(SQLAlchemyObjectType):
class Meta:
model = User
interfaces = (graphene.relay.Node,)
class CreateUser(graphene.Mutation):
class Arguments:
username = graphene.String(required=True)
email = graphene.String(required=True)
password = graphene.String(required=True)
joined = graphene.DateTime(required=False)
user = graphene.Field(lambda: UserObject)
def mutate(self, info, username, email, password, joined):
password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
user = User(username=username, email=email, password=password, joined=joined)
db.session.add(user)
db.session.commit()
return CreateUser(user=user)
class Mutation(graphene.ObjectType):
create_user = CreateUser.Field()
class Query(graphene.ObjectType):
all_users = SQLAlchemyConnectionField(UserObject)
schema = graphene.Schema(query=Query, mutation=Mutation)
app.add_url_rule(
'/graphql',
view_func=GraphQLView.as_view(
'graphql',
schema=schema,
graphiql=True
)
)
if __name__ == '__main__':
app.run()
错误:
{
"errors": [
{
"message": "(sqlite3.OperationalError) table user has no column named joined\n[SQL: INSERT INTO user (username, email, password, joined) VALUES (?, ?, ?, ?)]\n[parameters: ('Johannes', 'jns@dmo.no', b'$2b$12$H/E3gfKnuidoC70zgLBoUeQRtm4zRApZ7N/xplAtxFXk.fglpqJQi', '2019-10-18 17:53:11')]\n(Background on this error at: http://sqlalche.me/e/e3q8)",
"locations": [
{
"line": 2,
"column": 3
}
],
"path": [
"createUser"
]
}
],
"data": {
"createUser": null
}
}
好吧,多亏了@Doobeh,我成功地解决了这个问题。问题是我在调用db.create_all()后添加了“join”,因此join没有成为我数据库中的一列
因此,解决方案是在删除我的测试数据库后重新运行db.create_all()。您已经将
mutate
定义为需要连接的-也许可以尝试为其提供默认值def mutate(self,info,username,email,password,joined=None)
因此它是可选的,而不是必需的。谢谢@Doobeh的回复。遗憾的是,这并没有做到这一点,但我还是抱有希望。它似乎解决了最初的问题——现在它似乎报告了该列不在表中——您是否验证了sqlite数据库已创建/具有您期望的所有列?可能就是这样。现在正在约会,所以不能测试它。我可以尝试删除数据库并使用所有表正确地重新创建它@杜贝