sqlalchemy flask-sqlalchemy,sqlalchemy和flask_sqlalchemy区别

  sqlalchemy flask-sqlalchemy,sqlalchemy和flask_sqlalchemy区别

  本文主要介绍Flask-SQLALchemy的基本用法,并通过示例代码详细介绍。对大家的学习或工作都有一定的参考价值。有需要的朋友下面跟边肖学习。

  00-1010数据库基本操作向会话添加数据示例:在视图函数中定义模型类常用的SQLAlchemy查询过滤器。常用的SQLAlchemy查询执行器创建表:删除表,插入一个数据,一次插入多个数据查询。filter_by精确查询逻辑否定,返回所有名字不等于王的数据。And逻辑,需要导入and,返回所有满足and()条件的数据。或者说,需要导入or_not_相当于对查询数据进行倒排后删除与update关联的查询的例子。

  

目录

  在Flask-SQLAlchemy中,插入、修改和删除操作由数据库会话管理。表示为session db.session在准备将数据写入数据库之前,应该首先将数据添加到会话中,然后调用commit()方法提交会话。

  数据库会话的目的是保证数据的一致性,避免部分更新导致的数据不一致。提交操作将所有会话对象写入数据库,如果写入过程中出现错误,整个会话将无效。

  数据库会话也可以回滚,数据提交前的会话状态可以通过db.session.rollback()方法实现。

  在Flask-SQLAlchemy中,查询操作是通过查询对象来操作数据。最基本的查询是返回表中的所有数据,通过过滤器可以进行更精确的数据库查询。

  

数据库基本操作

  用户=用户(名称=python )

  db.session.add(用户)

  db.session.commit()

  

将数据添加到会话中示例:

  从烧瓶进口烧瓶

  从flask_sqlalchemy导入sqlalchemy

  app=Flask(__name__)

  #设置连接到数据库的URL

  app . config[ SQLALCHEMY _ DATABASE _ URI ]= MySQL ://root : MySQL @ 127 . 0 . 0 . 1:3306/Flask _ test

  #将数据库中的更改设置为在每个请求完成后自动提交。

  app . config[ SQLALCHEMY _ COMMIT _ ON _ tear down ]=True

  app . config[ SQLALCHEMY _ TRACK _ MODIFICATIONS ]=True

  #查询时将显示原始SQL语句

  app . config[ SQLALCHEMY _ ECHO ]=True

  db=SQLAlchemy(app)

  类角色(数据库。型号):

  #定义表名

  __tablename__=角色

  #定义列对象

  id=db。列(db。整数,primary_key=True)

  name=db。列(db。字符串(64),唯一=真)

  us=db.relationship(User ,backref=role )

  #repr()方法显示一个可读的字符串。

  def __repr__(self):

  return Role:%s% self.name

  类用户(数据库。型号):

  __tablename__=用户

  id=db。列(db。整数,primary_key=True)

  name=db。列(db。字符串(64),唯一=真,索引=真)

  email=db。列(db。字符串(64),唯一=真)

  pswd=db。列(db。字符串(64))

  role_id=db。列(db。整数,db。外键( roles.id ))

  def __repr__(self):

  返回 User:%s%self.name

  if __name__==__main__:

  db.dr

  op_all()

   db.create_all()

   ro1 = Role(name=admin)

   ro2 = Role(name=user)

   db.session.add_all([ro1,ro2])

   db.session.commit()

   us1 = User(name=wang,email=wang@163.com,pswd=123456,role_id=ro1.id)

   us2 = User(name=zhang,email=zhang@189.com,pswd=201512,role_id=ro2.id)

   us3 = User(name=chen,email=chen@126.com,pswd=987654,role_id=ro2.id)

   us4 = User(name=zhou,email=zhou@163.com,pswd=456789,role_id=ro1.id)

   db.session.add_all([us1,us2,us3,us4])

   db.session.commit()

   app.run(debug=True)

  

  

常用的SQLAlchemy查询过滤器

  过滤器说明filter()把过滤器添加到原查询上,返回一个新查询filter_by()把等值过滤器添加到原查询上,返回一个新查询limit使用指定的值限定原查询返回的结果offset()偏移原查询返回的结果,返回一个新查询order_by()根据指定条件对原查询结果进行排序,返回一个新查询group_by()根据指定条件对原查询结果进行分组,返回一个新查询

  

  

常用的SQLAlchemy查询执行器

  方法说明all()以列表形式返回查询的所有结果first()返回查询的第一个结果,如果未查到,返回Nonefirst_or_404()返回查询的第一个结果,如果未查到,返回404get()返回指定主键对应的行,如不存在,返回Noneget_or_404()返回指定主键对应的行,如不存在,返回404count()返回查询结果的数量paginate()返回一个Paginate对象,它包含指定范围内的结果

  

  

创建表:

  

db.create_all()

  

  

删除表

  

db.drop_all()

  

  

插入一条数据

  

ro1 = Role(name=admin)

  db.session.add(ro1)

  db.session.commit()

  #再次插入一条数据

  ro2 = Role(name=user)

  db.session.add(ro2)

  db.session.commit()

  

  

一次插入多条数据

  

us1 = User(name=wang,email=wang@163.com,pswd=123456,role_id=ro1.id)

  us2 = User(name=zhang,email=zhang@189.com,pswd=201512,role_id=ro2.id)

  us3 = User(name=chen,email=chen@126.com,pswd=987654,role_id=ro2.id)

  us4 = User(name=zhou,email=zhou@163.com,pswd=456789,role_id=ro1.id)

  db.session.add_all([us1,us2,us3,us4])

  db.session.commit()

  

  

查询:filter_by精确查询

  返回名字等于wang的所有人

  

User.query.filter_by(name=wang).all()

  first()返回查询到的第一个对象

  

User.query.first()

  all()返回查询到的所有对象

  

User.query.all()

  filter模糊查询,返回名字结尾字符为g的所有数据。

  

User.query.filter(User.name.endswith(g)).all()

  get(),参数为主键,如果主键不存在没有返回内容

  

User.query.get()

  

  

逻辑非,返回名字不等于wang的所有数据。

  

User.query.filter(User.name!=wang).all()

  

  

逻辑与,需要导入and,返回and()条件满足的所有数据。

  

from sqlalchemy import and_

  User.query.filter(and_(User.name!=wang,User.email.endswith(163.com))).all()

  

  

逻辑或,需要导入or_

  

from sqlalchemy import or_

  User.query.filter(or_(User.name!=wang,User.email.endswith(163.com))).all()

  

  

not_ 相当于取反

  

from sqlalchemy import not_

  User.query.filter(not_(User.name==chen)).all()

  

  

查询数据后删除

  

user = User.query.first()

  db.session.delete(user)

  db.session.commit()

  User.query.all()

  更新数据

  

user = User.query.first()

  user.name = dong

  db.session.commit()

  User.query.first()

  

  

使用update

  

User.query.filter_by(name=zhang).update({name:li})

  

  

关联查询示例

  角色和用户的关系是一对多的关系,一个角色可以有多个用户,一个用户只能属于一个角色。

  查询角色的所有用户:

  

#查询roles表id为1的角色

  ro1 = Role.query.get(1)

  #查询该角色的所有用户

  ro1.us

  查询用户所属角色:

  

#查询users表id为3的用户

  us1 = User.query.get(3)

  #查询用户属于什么角色

  us1.role

  

  到此这篇关于Flask-SQLALchemy基本使用方法的文章就介绍到这了,更多相关Flask SQLALchemy使用内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: