python - 如何在 ponyorm 中进行行计数? Python

标签 python sqlite ponyorm

我正在使用这个 Python ORM 来管理我的应用程序中的数据库:ponyorm.com

我刚刚更改了表中的一个属性,我会向我计算行数,他返回 1 表示 TRUE,0 表示 FALSE。

例如:仅使用 sqlite3 我会这样做:

user = conn.execute('SELECT * FROM users')

count = user.rowcount

if count == 1:
    print('Return %d lines' %count)
else:
    print('Bad....return %d lines', %count)

最佳答案

使用 rowcount 属性通常不是计算行数的正确方法。根据有关 rowcount 属性的 SQLite 文档,

Although the Cursor class of the sqlite3 module implements this attribute, the database engine’s own support for the determination of “rows affected”/”rows selected” is quirky.

如果您使用 SQL,获取行数的标准方法是使用 COUNT(*) 函数。在 SQLite 中可以通过以下方式实现:

cursor = conn.cursor()
cursor.execute('SELECT COUNT(*) FROM users')
rowcount = cursor.fetchone()[0]

使用 PonyORM,您可以通过三种替代方式进行计数。

rowcount = select(u for u in User).count()  # approach 1
rowcount = User.select().count()  # approach 2
rowcount = count(u for u in User)  # approach 3

上面的所有行都应该产生相同的查询。您可以选择对您来说最直观的那条线。

如果您不想统计所有行,而只想统计特定行,您可以在查询中添加条件。例如,要计算价格大于 100 的产品数量,您可以编写以下任何一行:

rowcount = select(p for p in Product if p.price > 100).count()  # approach 1
rowcount = Product.select(lambda p: p.price > 100).count()  # approach 2
rowcount = count(p for p in Product if p.price > 100)  # approach 3

此外,您可能不想计算行数,而是计算特定列中不同值的数量。例如,不同用户国家/地区的数量。这可以通过以下方式完成:

user_countries_count = select(count(u.country) for u in User).get()

希望我回答了你的问题。

关于python - 如何在 ponyorm 中进行行计数? Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28608007/

相关文章:

python - 如何在 DRF 中序列化通用外键

python - 我如何知道我使用的是哪个 Python 解释器?

sqlite - 将 ReaderT 和 runReaderT 与 SQLite 一起使用?

python - 如何在 Pony ORM 中使用 Oracle 模式名称?

python - 是否有像 Java 线程转储一样的 Python 线程转储方法?

php - 使用 PHP、MySQL 和 SQLite 登录和注册

php - 使用 sqlite 进行搜索索引?

python - 使用 Pony ORM 或 sqlalchemy 时,在哪里创建数据库对象?

python - 加载并绘图 %Y-%m-%d %H :%M:%S from a file