作者:林伯勋玉萍竣梅 | 来源:互联网 | 2023-05-21 12:16
我正在使用这个Python ORM来管理我的应用程序中的数据库:ponyorm.com
我只是在我的表中更改了一个属性,我会向我做一个rowcount,他返回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)
Alexander Ko..
10
使用该rowcount
属性通常不是计算行数的正确方法.根据关于rowcount
属性的SQLite文档,
虽然sqlite3模块的Cursor类实现了这个属性,但数据库引擎自己支持确定"受影响的行"/"所选行"是很古怪的.
如果使用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()
希望我回答你的问题.
1> Alexander Ko..:
使用该rowcount
属性通常不是计算行数的正确方法.根据关于rowcount
属性的SQLite文档,
虽然sqlite3模块的Cursor类实现了这个属性,但数据库引擎自己支持确定"受影响的行"/"所选行"是很古怪的.
如果使用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()
希望我回答你的问题.