上期文中已经简要介绍了一下flask在参数传递方面的根基常识,那么本文就简要的介绍一下flask的orm架构SQLAlchemy。
什么是SQLAlcheymy
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 。然则注重字段名前要写建立表的类