在我使用SQLAlchemy和Elixir编写的小脚本中,我需要获取特定列的所有不同值。在普通的SQL中,它只是一个简单的问题
SELECT DISTINCT `column` FROM `table`;
我知道我可以“手动”运行该查询,但如果可以,我宁愿坚持SQLAlchemy声明性语法(和/或Elixir)。我确信它一定是可能的,我甚至在SQLAlchemy文档中看到过这种类似的暗示,但我一直在寻找这些文档几个小时(以及Elixir的文档),我就是不能似乎真的弄清楚它将如何完成。那我错过了什么?
答案 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