在 Flask DB 类上使用 SQLalchemy 不同函数

Tho*_*son 2 python sqlite sqlalchemy distinct flask

是否可以使用不同的函数而不使用 sqlalchemy 中的“session”类?为什么或者为什么不?我在这里找到的答案:/sf/answers/2500288941/似乎它应该有效,但对我不起作用。请参阅下面的示例:

class Example(db.Model):
     title = db.Column(db.String(140))
     extra = db.Column(db.String(140))

e1 = Example(title='foo', extra='bar')
e2 = Example(title='hoo', extra='bar')

db.session.add_all([e1, e2])
db.session.commit()

test = []
for value in Example.query.distinct(Example.extra):
    test.append(value.extra)

print(len(test))
...2
Run Code Online (Sandbox Code Playgroud)

结果应该是1而不是2。查看distinct()的文档,我觉得这应该可行。我缺少什么?

Tho*_*son 6

我找到了几种方法来实现我想要的。查看这个答案/sf/answers/1205683951/,为了获取不同的值,必须在值上显式调用distinct()。要在类形式中执行此操作,可以使用“with_entities”

Example.query.with_entities(Example.extra).distinct()
Run Code Online (Sandbox Code Playgroud)

另外,就我而言,一个简单的 group_by 也达到了预期的结果(但它可能不是评论中指出的最好/最便携的解决方案。)

 test = []
    for value in Example.query.group_by(Example.extra):
        test.append(value.extra)

 print (test)
 ....['bar']
Run Code Online (Sandbox Code Playgroud)