当前位置:   article > 正文

【Flask】Flask-SQLAlchemy的使用_db = sqlalchemy()

db = sqlalchemy()

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

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

1、安装:

pip install flask-sqlalchemy
  • 1

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
  1. 使用flask_sqlalchemy.SQLAlchemy这个类定义一个对象,并将app传入进去。
db = SQLAlchemy(app)
  • 1

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
  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}'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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

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

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

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

db.create_all()
  • 1

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

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
  • 1

在这里插入图片描述

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 '添加成功'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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 "修改成功"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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 "删除成功"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/507795
推荐阅读
相关标签
  

闽ICP备14008679号