一、基本查询
我们从最基本的查询开始。假设我们有一个名为Users的表格,并且包含id、name和age三个列。查询User表格的所有记录可以通过如下代码实现:
from sqlalchemy import create_engine, Table, MetaData
engine = create_engine('postgresql://user:password@localhost/dbname')
connection = engine.connect()
metadata = MetaData()
users = Table('users', metadata, autoload=True, autoload_with=engine)
query = users.select()
result_proxy = connection.execute(query)
result_set = result_proxy.fetchall()
print(result_set)
在上述代码中,我们创建了一个 PostgreSQL 引擎,然后连接到该引擎并实例化 MetaData 类。接着,我们使用 autoload=True 和 autoload_with=engine 参数来加载表格结构,并使用 select() 方法查询所有记录。最后,我们通过 execute() 方法执行查询并遍历查询结果。
二、条件查询
通常情况下,我们并不需要查询所有记录,而是需要根据一定的条件来筛选数据。SQLAlchemy 提供了多种方法实现条件查询,示例如下:
from sqlalchemy import create_engine, Table, MetaData, and_
engine = create_engine('postgresql://user:password@localhost/dbname')
connection = engine.connect()
metadata = MetaData()
users = Table('users', metadata, autoload=True, autoload_with=engine)
query = users.select().where(
and_(
users.c.age > 18,
users.c.name.like('%john%')
)
)
result_proxy = connection.execute(query)
result_set = result_proxy.fetchall()
print(result_set)
在上述代码中,我们使用了 where() 方法来指定查询的条件。其中,and_() 方法用于同时满足多个条件,like() 方法用于模糊查询。
三、排序
在查询结果中,我们经常需要按照某个字段进行排序。SQLAlchemy 通过 order_by() 方法提供了排序功能:
from sqlalchemy import create_engine, Table, MetaData, desc
engine = create_engine('postgresql://user:password@localhost/dbname')
connection = engine.connect()
metadata = MetaData()
users = Table('users', metadata, autoload=True, autoload_with=engine)
query = users.select().order_by(desc(users.c.age))
result_proxy = connection.execute(query)
result_set = result_proxy.fetchall()
print(result_set)
在上述代码中,我们使用了 order_by() 方法和 desc() 方法实现降序排序。
四、连接查询
复杂的查询可能需要多个表格的连接,SQLAlchemy 通过 join() 方法提供了多种连接方式。示例如下:
from sqlalchemy import create_engine, Table, MetaData, join
engine = create_engine('postgresql://user:password@localhost/dbname')
connection = engine.connect()
metadata = MetaData()
users = Table('users', metadata, autoload=True, autoload_with=engine)
addresses = Table('addresses', metadata, autoload=True, autoload_with=engine)
query = join(users, addresses, users.c.id == addresses.c.user_id).select()
result_proxy = connection.execute(query)
result_set = result_proxy.fetchall()
print(result_set)
在上述代码中,我们使用了 join() 方法连接了 Users 表格和 Addresses 表格,并使用 users.c.id == addresses.c.user_id 实现了外连接。
五、分组和聚合
在某些情况下,我们需要使用聚合函数对查询结果进行计算。SQLAlchemy 通过 group_by() 和聚合函数提供了这样的功能。示例如下:
from sqlalchemy import create_engine, Table, MetaData, func
engine = create_engine('postgresql://user:password@localhost/dbname')
connection = engine.connect()
metadata = MetaData()
users = Table('users', metadata, autoload=True, autoload_with=engine)
query = select([
users.c.name,
func.count(users.c.age),
func.avg(users.c.age)
]).group_by(users.c.name)
result_proxy = connection.execute(query)
result_set = result_proxy.fetchall()
print(result_set)
在上述代码中,我们使用 group_by() 方法对查询结果进行分组,并使用 count() 和 avg() 聚合函数进行计算。
六、总结
在本篇文章中,我们介绍了SQLAlchemy 的基本查询、条件查询、排序、连接查询和分组聚合等功能。希望这些示例可以帮助您更好地理解SQLAlchemy 的使用,从而实现高效查询。