在SQLAlchemy / Elixir中选择不同的列值

时间:2010-02-01 08:05:10

标签: python sql sqlalchemy python-elixir

在我使用SQLAlchemy和Elixir编写的小脚本中,我需要获取特定列的所有不同值。在普通的SQL中,它只是一个简单的问题

SELECT DISTINCT `column` FROM `table`;

我知道我可以“手动”运行该查询,但如果可以,我宁愿坚持SQLAlchemy声明性语法(和/或Elixir)。我确信它一定是可能的,我甚至在SQLAlchemy文档中看到过这种类似的暗示,但我一直在寻找这些文档几个小时(以及Elixir的文档),我就是不能似乎真的弄清楚它将如何完成。那我错过了什么?

5 个答案:

答案 0 :(得分:77)

您可以查询映射类的列属性,并且Query类具有生成distinct()方法:

for value in Session.query(Table.column).distinct():
     pass

答案 1 :(得分:4)

对于这堂课:

class Assurance(db.Model):
    name = Column(String)

你可以这样做:

assurances = []
for assurance in Assurance.query.distinct(Assurance.name):
    assurances.append(assurance.name)

您将拥有不同值列表

答案 2 :(得分:2)

for user in session.query(users_table).distinct():
    print user.posting_id

答案 3 :(得分:1)

我想计算不同的值,并且先使用.distinct().count()进行计数,得到一个值,然后再进行不同的计算。我必须执行以下操作

from sqlalchemy.sql import func
Session.query(func.count(func.distinct(Table.column))

答案 4 :(得分:0)

对于班级,

onSubmit() {
        Object.keys(this.$refs).forEach((value) => {
           const refs = this.$refs[value];
           if (Array.isArray(refs)) {
               for (let i = 0; i <= this.$refs[value].length; i++) {
                   let key = this.$refs[value][i].$attrs['data-tag']
                   this.tags[key] = this.radio
               }
           } else {
               let key = this.$refs[value].$attrs['data-tag']
               this.tags[key] = this.textfield
           }
        })
    }

方法1:使用load_only

class User(Base):
    name Column(Text),
    id Column(Integer, primary_key=True)

方法2:没有任何导入

from sqlalchemy.orm import load_only
records= (db_session.query(User).options(load_only(name)).distinct().all())
values = [record[0] if len(record) == 1 else record for record in records] #list of distinct values