Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy中的Where子句_Python_Flask_Sqlalchemy_Flask Sqlalchemy - Fatal编程技术网

Python SQLAlchemy中的Where子句

Python SQLAlchemy中的Where子句,python,flask,sqlalchemy,flask-sqlalchemy,Python,Flask,Sqlalchemy,Flask Sqlalchemy,我有一个关于炼金术的问题 目前,我有两个使用Flask-SQLAlchemy的模型: class Action(db.Model): __tablename__ = 'ACTION' _FIELDS_LABELS = ("ID", "MODULE_ID", "CATEGORY", "LABEL", "COMMAND", "ARGS", "FILE_ID") _REPR_FIELDS = ("MODULE_NAME", "FILE_NAME") id = db

我有一个关于炼金术的问题

目前,我有两个使用Flask-SQLAlchemy的模型:

class Action(db.Model):

    __tablename__ = 'ACTION'

    _FIELDS_LABELS = ("ID", "MODULE_ID", "CATEGORY", "LABEL", "COMMAND", "ARGS", "FILE_ID")
    _REPR_FIELDS = ("MODULE_NAME", "FILE_NAME")

    id = db.Column(_FIELDS_LABELS[0], db.Integer, primary_key=True)
    module_id = db.Column(_FIELDS_LABELS[1], db.Integer, db.ForeignKey('MODULE.ID'))
    category = db.Column(_FIELDS_LABELS[2], db.String())
    label = db.Column(_FIELDS_LABELS[3], db.String())
    command = db.Column(_FIELDS_LABELS[4], db.String())
    args = db.Column(_FIELDS_LABELS[5], db.String())
    file_id = db.Column(_FIELDS_LABELS[6], db.Integer(), db.ForeignKey('FILE.ID'))

    file = db.relationship('File')

使用Flask,我尝试使用URL执行以下操作:

http://ip:port/modules/0/actions/18
所以我有一个行动蓝图:

action_blueprint = Blueprint('action',
                             __name__,
                             url_prefix="/modules/<string:module_id>/actions")
但我有以下错误:

AttributeError: 'NoneType' object has no attribute 'serialize'
生成的查询:

SELECT "ACTION"."ID" AS "ACTION_ID", "ACTION"."MODULE_ID" AS "ACTION_MODULE_ID", "ACTION"."CATEGORY" AS "ACTION_CATEGORY", "ACTION"."LABEL" AS "ACTION_LABEL", "ACTION"."COMMAND" AS "ACTION_COMMAND", "ACTION"."ARGS" AS "ACTION_ARGS", "ACTION"."FILE_ID" AS "ACTION_FILE_ID"
FROM "ACTION" JOIN "MODULE" ON "MODULE"."ID" = "ACTION"."MODULE_ID"
WHERE "MODULE"."ID" = ? AND "MODULE"."ID" = ?
查询的结尾有问题,但我真的不知道

action = Action.query.join(Module).filter(Module.id == module_id).filter_by(**request.args.to_dict()).first()

是否正确。

通过查看生成的查询,您的问题有些明显

WHERE "MODULE"."ID" = ? AND "MODULE"."ID" = ?
应该表明有什么不对劲,除非两个值相同,在这种情况下谓词是多余的。很明显

request.args.to_dict()
生成一个类似于

{ 'id': <some value> }

谢谢这是我当前使用的请求。但它不是对指定模块操作的筛选器。这可能是,但在您的示例中,请求args dict有一个密钥id,然后使用当前代码从模块中提取该密钥id。我忘了在答案中加上,因为
Query.first()
可能不会返回任何结果,您应该为此做好准备。你真的应该在问题中添加这样的细节。现在完全不清楚request.args实际上是什么,除了观察到的效果之外,还有什么作用。
request.args.to_dict()
{ 'id': <some value> }
action = Action.query...first()

if action:
    return jsonify(action.serialize)

else:
    # Handle not found