SQLAlchemy-对象关系教程ORM-Relationship

一:filter常用操作

1) equals

query.filter(User.name == ‘ed‘)

2) not equals

query.filter(User.name != ‘ed‘)

3) LIKE 是区分大小写的

query.filter(User.name.like(‘%ed%‘))

4) ILIKE 不区分大小写的

query.filter(User.name.ilike(‘%ed%‘))

5) IN

query.filter(User.name.in_([‘ed‘, ‘wendy‘, ‘jack‘]))

# works with query objects too:
query.filter(User.name.in_(
session.query(User.name).filter(User.name.like(‘%ed%‘))
))

6) NOT IN

query.filter(~User.name.in_([‘ed‘, ‘wendy‘, ‘jack‘]))

7) IS NULL

query.filter(User.name == None)
query.filter(User.name.is_(None))

8)IS NOT NULL

query.filter(User.name != None)
query.filter(User.name.isnot(None))

9) AND

# use and_()
from sqlalchemy import and_
query.filter(and_(User.name == ‘ed‘, User.fullname == ‘Ed Jones‘))

# or send multiple expressions to .filter()
query.filter(User.name == ‘ed‘, User.fullname == ‘Ed Jones‘)

# or chain multiple filter().filter_by() calls
query.filter(User.name == ‘ed‘).filter(User.fullname == ‘Ed Jones‘)

10) OR

from sqlalchemy import or_
query.filter(or_(User.name == ‘ed‘, User.name == ‘wendy‘))

11)MATCH

match()使用一个特定于数据库的 MATCH或 CONTAINS函数;它的行为会有所不同后端和不可用等后端SQLite。
query.filter(User.name.match(‘wendy‘))

二:返回结果

  Query发出SQL语句和返回包括数据库结果一个值

  

print(session.query(User.name).filter(User.fullname=="shi jun2"))
--------------------------------------------
SELECT users.name AS users_name
FROM users
WHERE users.fullname = %(fullname_1)s

   1)all()取出所的记录

  2)first()返回第一条记录

  3)one():不存在,或者有多行记录的时候报错(no items found,multiple items found

  4)one_or_none():如果有一条记录就返回一条记录,如果没有记录就返回NONE

  5)scalar()调用 one()方法,成功返回只有一行结果的第1列

  

query=session.query(User.name).first()
print(query)
(‘shi‘,)
query=session.query(User.name).all()
print(query)
[(‘shi‘,), (‘shi2‘,)]
query=session.query(User.name).one()
print(query)

sqlalchemy.orm.exc.MultipleResultsFound: Multiple rows were found for one()

query=session.query(User.name).filter(User.name=="shi").one()#这里查询出的结果只有1条,所以不会报错
print(query)
(‘shi‘,)
如果有一条记录就返回一条记录,如果没有记录就返回NONE
query=session.query(User.name).filter(User.name=="shi").one_or_none()
(‘shi‘,)
print(query)
query=session.query(User.name).filter(User.name=="sh3").one_or_none()
print(query)
None

query=session.query(User.name).filter(User.name=="shi").scalar()
print(query)
shi

三:Query通过text()可以使用字符串

# for user in session.query(User).filter(text("id<224")).order_by(text("id")).all():
#     print(user)

#通过params传递参数,使用:来分开参数

# for user in session.query(User).filter(text("id>:value and name=:name")).params(value=1,name="fred").order_by(User.id).one():
#     print(user)

for user in session.query(User).from_statement(text("select * from users where name=:name")).params(name="shi").all():
    print(user)

四:count()方法用于确定SQL语句将返回多少行

print(session.query(User).filter(User.name.like("shi%")).count())
    使用func.count()统计

from sqlalchemy import func
for row in session.query(func.count(User.name),User.name).group_by(User.name).all():
    print(row)
    ------------
    (1, ‘shi‘)
(1, ‘shi2‘)

select count(*) from table
==session.query(func.count(‘*‘)).select_from(User).scalar()
时间: 2024-10-14 06:25:09

SQLAlchemy-对象关系教程ORM-Relationship的相关文章

SQLAlchemy-对象关系教程ORM查询

一:对象关系教程查询 一个 Query创建对象时使用 Session的query()方法 .此函数接受一个变量数量的参数,可以是任何类和class-instrumented描述符的组合. Query它加载User实例 for instance in session.query(User).order_by(User.id): print(instance.name,instance.fullname) -----------------------------------------------

Android数据库框架——ORMLite轻量级的对象关系映射(ORM)Java包

Android数据库框架--ORMLite轻量级的对象关系映射(ORM)Java包 事实上,我想写数据库的念头已经很久了,在之前写了一个答题系统的小项目那只是初步的带了一下数据库,数据库是比较强大的,不是我们三言两语就能解决的,我一直想抽个时间自己再过一遍Sqlite和JDBC的,但是,大家也知道,琐事比较多,我们来说一下数据库的框架吧,事实上市面上,我觉得还可以的数据库框架有两个,ORMLite和GreenDao,我以前做的运动类的应用上,就需要存储大量的运动数据,我们最开始是在本地写数据库的

通过java反射实现简单的关于MongoDB的对象关系映射(ORM).

通过阅读MongoDB  3.2.1的官方文档中关于java 编程发现最新的文档并没有实现对对象到Document的映射,所以自己有了利用反射实现简单的关系映射. 1.定义抽象类:AbstractMongoSession import java.util.List; import org.bson.Document; import org.bson.conversions.Bson; import com.mongodb.client.MongoCollection; import com.mo

对象关系映射 ORM

1.1 作用 MTV框架中包括一个重要的部分,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动 1.2 具体功能 1 创建表,修改表,删除表 2 插入数据 3 修改数据 4 删除数据 注:不能创建库,在连接mysql前确保库先创建好 1.3 与Python的对应关系 类名----->表 对象------>一条数据 属性----->字段 -----------

python中通过元类(TYPE)简单实现对象关系映射(ORM)

ORM是创建一个实例对象,用创建他的类名当做数据表名,用创建他的类属性对应数据表的字段,不需要在自己写复杂的sql语句,而是通过对实例对象的操作时,能让代码自动帮我们整理为对应的sql语句. class User(父类): uid = ("uid", "int unsigned") name = ("username", "varchar(20)") password = ("password", &quo

对象关系映射(ORM)

对象-关系映射(Object Relational Mapping,简称ORM,对象关系映射)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中.本质上就是将数据从一种形式转换到另外一种形式. 对象-关系映射(Object/Relation Mapping,简称ORM),是随着面向对象的软件开发方法发展而产生的.面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数

解析大型.NET ERP系统数据访问 对象关系映射框架LLBL Gen Pro

LLBL Gen Pro是一个为.NET开发人员设计的的对象关系映射(ORM)框架,与NHibernate,Entity Framework等框架一样,通过实体与数据表的映射,实现关系数据库持久化. 1  LLBL Gen Pro 入门  LLBL Gen Pro Basic 打开LLBL Gen Pro程序,在右边的数据库浏览器(Catelog Explorer)中根结点右键选择从关系数据库创建关系模型( Add Relational Model Data from a Database),然

Android数据库框架——GreenDao轻量级的对象关系映射框架,永久告别sqlite

Android数据库框架--GreenDao轻量级的对象关系映射框架,永久告别sqlite 前不久,我在写了ORMLite这个框架的博文 Android数据库框架--ORMLite轻量级的对象关系映射(ORM)Java包 但是对于我个人来说,我可能更加倾向于用GreenDao,所以今天也为大家带来了GreenDao的详细博客,希望大家喜欢,之前也详细介绍了ORM的思想,如果不明白可以先看一下前面的博文,这里就不多赘述了,我们新建一个工程 一.相关介绍 官方网站 : http://greendao

Python与数据库[2] -&gt; 关系对象映射/ORM -&gt; 利用 sqlalchemy 实现关系表查询功能

利用 sqlalchemy 实现关系表查询功能 下面的例子将完成一个通过关系表进行查询的功能,示例中的数据表均在MySQL中建立,建立过程可以使用 SQL 命令或编写 Python 适配器完成. 示例中用到的表主要有3张,一张personInfo个人信息表,一张account_store账号信息表,以及一张person_account_rel的个人信息与账号关系表. 示例中将会通过已知的人物年龄和id通过个人信息表查出个人姓名(仅为参考示例,请忽略怪异的查找逻辑 :) ),随后根据关系表得到的人

Django之ORM对象关系模型

MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动 ORM是“对象-关系-映射”的简称.(Object Relational Mapping,简称ORM)(将来会学一个sqlalchemy,是和他很像的,但是django的orm没有独立出来让别人去使用,虽然功能比sqlalchemy更强大,但是别人用不了) 在使用