Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ponyorm计算行数?python_Python_Sqlite_Ponyorm - Fatal编程技术网

如何在ponyorm计算行数?python

如何在ponyorm计算行数?python,python,sqlite,ponyorm,Python,Sqlite,Ponyorm,我使用这个Python ORM在我的应用程序:ponyorm.com中管理我的数据库 我刚刚更改了表中的一个属性,我会对我进行行计数,他返回1表示真,0表示假 例:仅使用sqlite3我会这样做: user = conn.execute('SELECT * FROM users') count = user.rowcount if count == 1: print('Return %d lines' %count) else: print('Bad....return %d

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

我刚刚更改了表中的一个属性,我会对我进行行计数,他返回1表示真,0表示假

例:仅使用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
属性通常不是计算行数的正确方法。根据SQLite关于
rowcount
属性的文档

尽管sqlite3模块的Cursor类实现了这个属性,但数据库引擎本身对确定“受影响的行”/“选定的行”的支持却很奇怪

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

cursor = conn.cursor()
cursor.execute('SELECT COUNT(*) FROM users')
rowcount = cursor.fetchone()[0]
user_countries_count = select(count(u.country) for u in User).get()
有了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
此外,您可能不想计算行数,而是要计算特定列中不同值的数量。例如,不同用户国家的数量。这可以通过以下方式完成:

cursor = conn.cursor()
cursor.execute('SELECT COUNT(*) FROM users')
rowcount = cursor.fetchone()[0]
user_countries_count = select(count(u.country) for u in User).get()

希望我能回答你的问题。

不清楚你在问什么。你能进一步描述一下这个问题吗?你问的问题还不清楚。我编辑了我的问题,很抱歉给你带来不便。如果你对答案感到满意,你能接受正确答案吗?;)