Flask-SQLAlchemy的使用是对SQLAlchemy进行了封装和优化:
- Flask-SQLAlchemy是Flask框架的一个插件
- Flask-SQLAlchemy是对SQLAlchemy进行了一个简单的封装的一个插件
- 使得我们在Flask中使用sqlalchemy更加的简单。
1、安装:
pip install flask-sqlalchemy
2.Flask-SQLAlchemy的使用要点:
2.1 数据库连接
数据库初始化不再是通过create_engine。
- 跟sqlalchemy一样,定义好数据库连接字符串DB_URI。
- 将这个定义好的数据库连接字符串DB_URI,通过SQLALCHEMY_DATABASE_URI这个key名配置到app.config中。
代码:
app.config["SQLALCHEMY_DATABASE_URI"] = DB_URI
- 使用flask_sqlalchemy.SQLAlchemy这个类定义一个对象,并将app传入进去。
db = SQLAlchemy(app)
2.2 创建ORM模型类
之前都是通过Base = declarative_base()来初始化一个基类,然后再继承,在Flask-SQLAlchemy中更加简单了。
- 还是跟使用sqlalchemy一样,定义模型。现在不再是需要使用delarative_base来创建一个基类。而是使用db.Model来作为基类。
- 在模型类中,Column、String、Integer以及relationship等,都不需要导入了,直接使用db下面相应的属性名就可以了。
from flask_sqlalchemy import SQLAlchemy
- 在定义模型的时候,可以不写__tablename__,那么flask_sqlalchemy会默认使用当前的模型的名字转换成小写来作为表的名字,
- 并且如果这个模型的名字用到了多个单词并且使用了驼峰命名法,那么会在多个单词之间使用下划线来进行连接,虽然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模型映射到数据库表
写完模型类后,要将模型映射到数据库的表中,使用以下代码即可
- 删除数据库表:db.drop_all()
- 创建数据库表: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