【Flask】Flask-SQLAlchemy的使用

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 【Flask】Flask-SQLAlchemy的使用,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

Flask-SQLAlchemy的使用是对SQLAlchemy进行了封装和优化:

  • Flask-SQLAlchemy是Flask框架的一个插件
  • Flask-SQLAlchemy是对SQLAlchemy进行了一个简单的封装的一个插件
  • 使得我们在Flask中使用sqlalchemy更加的简单。

1、安装:

pip install flask-sqlalchemy

2.Flask-SQLAlchemy的使用要点:

2.1 数据库连接

数据库初始化不再是通过create_engine。

  1. 跟sqlalchemy一样,定义好数据库连接字符串DB_URI。
  2. 将这个定义好的数据库连接字符串DB_URI,通过SQLALCHEMY_DATABASE_URI这个key名配置到app.config中。
    代码:
app.config["SQLALCHEMY_DATABASE_URI"] = DB_URI
  1. 使用flask_sqlalchemy.SQLAlchemy这个类定义一个对象,并将app传入进去。
db = SQLAlchemy(app)

2.2 创建ORM模型类

之前都是通过Base = declarative_base()来初始化一个基类,然后再继承,在Flask-SQLAlchemy中更加简单了。

  1. 还是跟使用sqlalchemy一样,定义模型。现在不再是需要使用delarative_base来创建一个基类。而是使用db.Model来作为基类。
  2. 在模型类中,Column、String、Integer以及relationship等,都不需要导入了,直接使用db下面相应的属性名就可以了。
from flask_sqlalchemy import SQLAlchemy
  1. 在定义模型的时候,可以不写__tablename__,那么flask_sqlalchemy会默认使用当前的模型的名字转换成小写来作为表的名字,
  2. 并且如果这个模型的名字用到了多个单词并且使用了驼峰命名法,那么会在多个单词之间使用下划线来进行连接,虽然flask_sqlalchemy给我们提供了这个特性,但是不推荐使用。(增强代码可读性,提高团队合作效率)app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

代码:

#2、创建模型类
class User(db.Model):   #db.Model:固定的写法
    __tablename__='t_user'
    id=db.Column(db.Integer,primary_key=True,autoincrement=True)
    uname=db.Column(db.String(50))
    pwd=db.Column(db.String(50))

    def __repr__(self):
        return f'用户名:{self.uname}~~密码:{self.pwd}'

2.3 将ORM模型映射到数据库表

写完模型类后,要将模型映射到数据库的表中,使用以下代码即可

  1. 删除数据库表:db.drop_all()
  2. 创建数据库表:db.create_all()

执行代码:数据表创建成功

db.create_all()

但是启动项目会出现一个警告
在这里插入图片描述
解决方法是:添加一行代码:

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

在这里插入图片描述

2.4 session的使用

以后session也不需要使用sessionmaker来创建了,
直接使用db.session就可以了,
操作这个session的时候就跟之前的sqlalchemy的session是一样一样的。

2.5 添加数据

添加数据和之前的没有区别,只是session成为了一个db的属性

@app.route('/create')
def create():
    name=request.args.get('name')
    pwd=request.args.get('pwd')
    print(name,pwd)
    #插入到数据库表t_user中
    user=User(uname=name,pwd=pwd)
    db.session.add(user)
    db.session.commit()
    return '添加成功'

2.6 查询数据

1.单表查询
查询数据不再是之前的session.query方法了,而是将query属性放在了db.Model上,所以查询就是通过“模型名.query”的方式进行查询了,query就跟之前的sqlalchemy中的query方法是一样用的。
2.多表查询
如果查找数据涉及多个模型,只能使用db.session.query(模型名).all() 这种方式

@app.route('/query')
def query():
    id=request.args.get('id')
    user=db.session.query(User).filter(User.id==id).first()
    print(user)
    return "查询成功,查到的用户名是{}".format(user.uname)

2.7 修改数据:

修改数据和之前的没有区别,只是session成为了一个db的属性

@app.route('/update')
def update():
    id=request.args.get('id')
    name=request.args.get('name')
    pwd=request.args.get('pwd')
    #获取id=id的数据
    res=db.session.query(User).filter(User.id==id).first()
    print(res)
    res.uname=name
    res.pwd=pwd
    db.session.add(res)
    db.session.commit()
    return "修改成功"

2.8 删除数据:

删除数据跟添加数据和修改数据类似,只不过session是db的一个属性而已

@app.route('/delete')
def delete_user():
    name=request.args.get('name')
    user=User.query.filter(User.uname==name).first()
    if user:
        db.session.delete(user)
        db.session.commit()
    return "删除成功"

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123399.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!