0

我正在尝试过滤外键,但我搜索的所有 SO 答案都没有提供任何结果。

我的查询语句在哪里。

testing = Comments\
    .filter(Comments.post_id==post_id)
print(testing)

testing = Comments\
        .query.join(Post, aliased=True)\
        .filter(Comments.post_id==post_id)
print(testing)

这是我的类定义的样子

class Comments(db.Model):

    comment_id =  db.Column(db.Integer, primary_key=True)
    post_id = db.Column(
        db.Integer,
        db.ForeignKey("Post.post_id"),
        nullable=False)

class post(db.Model):
    post_id =  db.Column(db.Integer, primary_key=True)

Comments = db.relationship(
        'Comments',
        backref='Post',
        lazy='dynamic')

从第一种和第二种情况产生的实际 SQL 查询。他们都有这个奇怪的 :post_id_1 东西。在这两种情况下,我都得到了一个空集。

FROM "Comments" 
WHERE "Comments".post_id = :post_id_1

FROM "Comments" JOIN "post" AS "post_1" ON "post_1".post_id = "Comments".post_id 
WHERE "Comments".post_id = :post_id_1

如果我做一个简单的

Select * from Comments where post_id = 1

在 mysql CLI 中,我得到了一个结果集。

4

1 回答 1

0

您的模型定义很奇怪,以下部分没有正确缩进:

Comments = db.relationship(
        'Comments',
        backref='Post',
        lazy='dynamic')

或者也许这只是一个复制/粘贴问题(只是为了确定)。

您所说的“奇怪的:esc_id_1 事物”实际上是一个命名占位符。在执行 SQL 语句时,它们将被实际值替换(这主要是为了避免 SQL 注入,驱动程序负责对值进行转义)。

于 2013-08-20T07:56:51.790 回答