我正在尝试过滤外键,而我搜索过的所有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
答案 0 :(得分:0)
您的模型定义很奇怪,以下部分未正确缩进:
Comments = db.relationship(
'Comments',
backref='Post',
lazy='dynamic')
或许它只是一个复制/粘贴问题(只是为了确定)。
你所谓的“怪异:esc_id_1事物”实际上是一个命名的占位符。当执行SQL语句时,它们将被实际值替换(这主要是为了避免SQL注入,驱动程序负责转义值)。