首页 > 科技 >

一文入门:Flask要件之ORM架构SQLAlchemy

2019-09-13 03:34:55 暂无 阅读:1327 评论:0

上期文中已经简要介绍了一下flask在参数传递方面的根基常识,那么本文就简要的介绍一下flask的orm架构SQLAlchemy。

什么是SQLAlcheymy

一文入门:Flask要件之ORM架构SQLAlchemy

SQLAlchemy是Python编程说话下的一款开源软件。供应了SQL对象包及对象关系映射(ORM)对象,使用MIT许可证刊行。SQLAlchemy“采用简洁的Python说话,为高效和高机能的数据库接见设计,实现了完整的企业级持久模型”。SQLAlchemy的理念是,SQL数据库的量级和机能主要于对象鸠合;而对象鸠合的抽象又主要于表和行。是以,SQLAlchemy采用了雷同于Java里Hibernate的数据映射模型,而不是其他ORM框架采用的Active Record模型。不外,Elixir和declarative等可选插件能够让用户使用声明语法。SQLAlchemy首次刊行于2006年2月,并敏捷地在Python社区中最普遍使用的ORM对象之一,不亚于Django的ORM框架

SQLAlchemy的根基使用

凭据笔者对于SQLAlchemy的探究,SQLAlchemy的使用根基有以下几个根基要点:

1. 情况的预备

既然SQLAlchemy是python下的一款开源软件,那么其使用也如其他的软件模块一般,也是经由pip对象进行安装,在安装完成之后,直接import即可

#SQLAlchemy的安装

pip install SQLAlchemy

#SQLAlchemy的引用

import SQLAlchemy

2. SQLAlcheymy的根基设置

那么在编码中若何进行数据库链接的设置呢?这个问题纪就要连系编者的上几篇文中的常识点一路连系使用,在flask的根基使用中,需要使用下文实例化一个flask变量,而数据库的各类设置参数就经由字典元素赋值的体式进行设置,具体如下

app = flask() #实例化flask变量

app.config['SQLALCHEMY_DATABASE_URI'] = '数据库类型://数据库登录名:数据库登录暗码@数据库的地址:数据库的端口/数据库的名字'

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

app.config['SQLALCHEMY_ECHO'] = True

在经由了参数设定后,在经由带参实例化方式,建立一个SQLAlcheymy变量,如下:

db = SQLAlchemy(app)

凭据分歧的数据库类型,那么就能够有如下各类分歧的数据库保持参数设定:

postgresql://scott:tiger@localhost/mydatabase

mysql://scott:tiger@localhost/mydatabase

oracle://scott:tiger@127.0.0.1:1521/sidname

sqlite:////absolute/path/to/foo.db

3. 建立映射物理表的类

class Role(db.Model):

__tablename__ = "my_table" # 写表名

id = db.Column(db.INTEGER,primary_key=True) # 这行不克删

name = db.Column(db.String(10),nullable=False) # 这行也是

在使用SQLAlchemy时,必然要注重,不光仅要保持到数据表,而且你的建立表的类也必需写进来。并且字段和约束前提要吻合,否则会报错的。那么这里首要的常识点是如下两个:__ tablename __ :用来界说类所映射的物理表的名称column:用来界说一个映射到数据库表中的一个字段

4. SQLAlchemy框架下的数据插入

和其他的orm框架一般,要完成数据的插入,首先要建立一个对象实例,好比这里是:

r1 = Role(name="用户1")

同理,能够建立多个

r1 = Role(name="用户1")

r2 = Role(name="用户2")

r3 = Role(name="用户3")

那么若何完成数据库的插入呢,实例如下:

db.session.add(r1) #增加一笔记录

db.session.commit()

db.session.add_all([r2,r3]) #增加多行记录

db.session.commit()

5. SQLAlchemy框架下的数据删除

进行数据的删除,首先需要进行行定位:

user = User.query.first()

db.session.delete(user)

db.session.commit()

或许

User.query.first().delete()

db.session.commit()

6. SQLAlchemy框架下的数据更新

更新数据也是与删除同理,需要进行行定位

user = User.query.first()

user.name = 'dong'

db.session.commit()

7. SQLAlchemy框架下的数据查询

最后的一个常识点是SQLAlchemy框架下的数据查询,针对分歧的场景,SQLAlchemy供应的对应的处理体式:

#查询有几多个用户

count = User.query.count()

# 查询第一个用户

first_user = User.query.first()

# 查询id为4的用户信息(体式1,最常用)

fourth_user = User.query.filter(User.id==4).all()

# 查询id为4的用户信息(体式2)

fourth_user = User.query.get(4)

# 查询id为4的用户信息(体式3)

fourth_user = User.query.filter_by(id=4).all()

# 查询名字结尾字符为g的所稀有据

endwithg = User.query.filter(User.name.endswith("g")).all()

# 查询名字开首字符为g的所稀有据

startwithg = User.query.filter(User.name.startswith("z")).all()

# 查询名字不等于wang的所稀有据[2种体式]

notwang = User.query.filter(User.name != "wang").all() # 最常用

notwang = User.query.filter(not_(User.name == "wang")).all()

# 查询名字和邮箱都以 li 开首的所稀有据[2种体式]

userdd = User.query.filter(User.name.startswith("li"),User.email.startswith("li")).all() #常见

userdd = User.query.filter(and_(User.name.startswith("li"),User.email.startswith("li"))).all()

# 查询password是`123456`或许`email`以`itheima.com`结尾的所稀有据

user = User.query.filter(or_(User.password == "123456",User.email.endswith("itheima.com"))).all()

# 查询id为[1, 3, 5, 7, 9]的用户列表SQL语句中局限查询 in ,flask中 模型类名.字段.in_(列表)

list1 = [1,3,5,7,9]

user = User.query.filter(User.id.in_(list1)).all()

# 查询所有效户数据,并以邮箱排序

user = User.query.order_by(User.id).all()

# 倒序,字段名后加desc()

user = User.query.order_by(User.id.desc()).all()

# 每页3个,查询第2页的数据:ret = paginate(页码,每一页的数据量)

ret = User.query.paginate(2,3)

总结和注重点flask 默认开启事务,所以把持完成后要 commit 才能提交到数据库sqlchemy 点窜和删除数据都是基于查询上的。我们必需先查出数据,all()是查出一行一行数据的列表,first()是查出第一行数据。必然要有这种查出来是一行的思惟,才能更好的进修ORMfilter 是一个过滤器,里面写前提,相当与SQL语句的 where 。然则注重字段名前要写建立表的类

相关文章