📜  SQLAlchemy核心-选择行(1)

📅  最后修改于: 2023-12-03 15:05:19.761000             🧑  作者: Mango

SQLAlchemy 核心-选择行

SQLAlchemy是一个Python开发的ORM(对象关系映射)工具,提供的API非常强大、完整,是Python中最为流行的ORM框架之一。这里将介绍SQLAlchemy核心中的选择行功能。

查询方法

SQLAlchemy中,查询时使用 select 函数或 select 方法来获得 Select 对象。其中 select 函数可以从一个基于表达式的角度进行选择。

from sqlalchemy import Table, Column, Integer, String, MetaData

metadata = MetaData()

user = Table('user', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String),
    Column('age', Integer),
    Column('address', String),
)

from sqlalchemy import select

stmt = select([user])

from sqlalchemy import create_engine

engine = create_engine('sqlite:///example.db')

conn = engine.connect()

result = conn.execute(stmt)

rows = result.fetchall()

for row in rows:
    print(row)

通过上述代码,得到了 result 对象表示结果集。可以使用 fetchonefetchall 两种方法获取一个或所有结果,它们返回的对象是一个元组:

(1, 'Tom', 18, 'Beijing')
(2, 'Jerry', 20, 'Shanghai')
(3, 'Bob', 22, 'Guangzhou')

其中,元组中的每个值分别对应于 select 语句中指定的列。

带条件的查询

查询时可以带上条件,例如:

stmt = select([user]).where(user.c.age > 20)

result = conn.execute(stmt)

rows = result.fetchall()

for row in rows:
    print(row)

上述代码中,where 子句限制了查询结果中年龄大于 20 的行。

连接查询

在SQLAlchemy中,可以通过 join 函数对多个表进行联接查询。例如:

from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey

metadata = MetaData()

user = Table('user', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String),
    Column('age', Integer),
    Column('address', String),
)

orders = Table('orders', metadata,
    Column('id', Integer, primary_key=True),
    Column('user_id', Integer, ForeignKey("user.id")),
    Column('product', String),
    Column('price', Integer)
)

stmt = select([user.c.name, orders.c.product, orders.c.price]).select_from(
    user.join(orders, user.c.id == orders.c.user_id)
)

result = conn.execute(stmt)

rows = result.fetchall()

for row in rows:
    print(row)

上述代码中,创建了两个表 userorders,其中 orders 表中的 user_id 列是 user 表的外键。语句中使用 join 函数对两个表进行联接查询,并限制结果集中包含 user.nameorders.productorders.price 列。

总结

SQLAlchemy提供了强大的选择行功能,支持基于表达式和方法的查询方式。在查询时,可以添加条件或进行连接查询,满足各种复杂查询的需求。