python - 使用 SQLite 在 SQLAlchemy 中返回不同的行

标签 python sqlite sqlalchemy

SQLAlchemy 的 Query.distinct方法的行为不一致:

>>> [tag.name for tag in session.query(Tag).all()]
[u'Male', u'Male', u'Ninja', u'Pirate']
>>> session.query(Tag).distinct(Tag.name).count()
4
>>> session.query(Tag.name).distinct().count()
3

所以第二种形式给出了正确的结果,但第一种形式没有。这似乎发生在 SQLite 但不是 Postgres。我有一个函数,它传递了一个查询对象以对其应用 distinct 子句,因此使用上面的第二种方法重写所有内容将非常困难。我有什么明显的遗漏吗?

最佳答案

根据文档:

When present, the Postgresql dialect will render a DISTINCT ON (>) construct.

因此,将列表达式传递给 distinct() 仅适用于 PostgreSQL(因为存在 DISTINCT ON)。

在表达式 session.query(Tag).distinct(Tag.name).count() sqlalchemy 忽略 Tag.name 并产生查询(在所有字段):

SELECT DISTINCT tag.country_id AS tag_country_id, tag.name AS tag_name 
FROM tag

正如你所说,在你的情况下 distinct(Tag.name) 被应用 - 所以不仅仅是 count() 考虑使用这个:

session.query(Tag).distinct(Tag.name).group_by(Tag.name).count()

希望对您有所帮助。

关于python - 使用 SQLite 在 SQLAlchemy 中返回不同的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17223174/

相关文章:

python - 如何正确使用 djangorestframworkjwt

python - 如何在 Django 模型中按不同模型中的字段降序排序?

c# - 使用多线程在 SQLite 数据库中插入记录的性能问题

javascript - SQL 删除未按预期工作

c# - LINQ to SQL和SQLite-在UTF-8字符串中搜索

python - 单个表上的 SQLAlchemy 多对多关系错误 : NoReferencedTableError

python - 是否可以在 python gRPC 服务器中返回自定义错误?

python - 在 SqlAlchemy 中反射(reflect)数据库时缺少外键关系

python - 使用 sqlalchemy 和 pyodbc 在 MS SQL Server 上获取查询的返回行

python - matplotlib 时间序列图表上的颜色填充