计算两列之间的差值
在查询中,您经常需要进行数学运算,例如计算 2000 年到 2008 年的人口变化。对于数值型数据的数学运算,SQLAlchemy 中的运算符与 Python 的用法相同。
您可以使用这些运算符进行加法(+)、减法(-)、乘法(*)、除法(/)和取模(%)运算。注意:用于非数值型列时,它们的行为会不同。
现在让我们找出 2000 年到 2008 年间人口增长最多的前 5 个州。
本练习是课程的一部分
Python 中的数据库入门
练习说明
- 定义一个名为
stmt的 select 语句,返回:- i)
census表的州列(census.columns.state)。 - ii)2008 年(
census.columns.pop2008)与 2000 年(census.columns.pop2000)的人口数之差,并标记为'pop_change'。
- i)
- 按
census.columns.state对语句进行分组。 - 按人口变化(
'pop_change')降序排序。通过传入desc('pop_change')实现。 - 在上一条语句上使用
.limit()方法,仅返回 5 条记录。 - 执行该语句并使用
fetchall()获取记录。 - 打印语句已为您写好。提交答案即可查看结果!
交互式实操练习
通过完成这段示例代码来试试这个练习。
# Build query to return state names by population difference from 2008 to 2000: stmt
stmt = select([____, (____-____).label(____)])
# Append group by for the state: stmt_grouped
stmt_grouped = stmt.group_by(____)
# Append order by for pop_change descendingly: stmt_ordered
stmt_ordered = stmt_grouped.order_by(____)
# Return only 5 results: stmt_top5
stmt_top5 = ____
# Use connection to execute stmt_top5 and fetch all results
results = connection.execute(____).fetchall()
# Print the state and population change for each record
for result in results:
print('{}:{}'.format(result.state, result.pop_change))