SQLAlchemy
中的
Query
方法
在
SQLAlchemy
中执行查询是通过
session
对象的
query
方法完成的。
query
方法非常灵活,
你可以根据需要使用不同的查询方式查找数据,下面一一举例。
1.
直接通过映射类查找:
#Querying user instance
for instance in session.query(User).order_by(User.id):
print instance.name,instance.fullname
这种方法只要在
query
方法中,
将映射类作为参数,
就可以查询出这个映射类代表的数据库
表中的数据。其相当于下面的
SQL
语句:
SELECT users.id AS users_id, users.name AS users_name,
users.fullname AS users_fullname, users.password AS users_password
FROM users ORDER BY users.id
2.
通过映射类的属性字段查询:
#Querying by ORM-instrument
for name,fullname in session.query(User.name,User.fullname):
print name,fullname
这种方法指定了查询的具体字段,而不是像第一种方法那样把映射类的所有字段都查询出
来,其相当于执行了下面的
SQL
语句:
SELECT users.name AS users_name, users.fullname AS users_fullname
FROM users
3.query
查询的结果是保存在一个元组中的,
所以我们可以在
query
中指定返回整个的映射
类对象和其中的部分属性字段:
#Querying as a Python object
for row in session.query(User,User.name).all():
print row.User,row.name
这种查询方法可以返回一个
User
对象以及它的
name
属性字段的值,
其相当于执行了下面的
SQL
语句:
SELECT users.id AS users_id, users.name AS users_name, users.fullname AS
users_fullname, users.password AS users_password
FROM users
其输出结果为一个元组和一个字符串:
<user("ed","Ed Jones","f8x902")> ed
<user("Wendy","Wendy Williams","foobar")> Wendy
<user("Marry","Marry Contrary","xxg527")> Marry
<user("Fred","Fred Flinstone","blah")> Fred
4.
我们还可以给返回的结果起一个别名,或者叫标签:
#Querying labeled