• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Flask框架——28 Flask_SQLAlchemy

武飞扬头像
北极的三哈
帮助1

学新通

学新通


Flask-SQLAlchemy

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

HOSTNAME = 'localhost'
PORT = '3306'
DATABASE = 'flask_db'
USERNAME = 'root'
PASSWORD = 'root'
DB_URL = 'mysql pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)

2.将这个定义好的数据库连接字符串DB_URI,通过SQLALCHEMY_DATABASE_URI 这个key名配置到 app.config中。

# 把连接数据库参数设置到 app中
app.config['SQLALCHEMY_DATABASE_URL'] = DB_URL

3.使用 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 下面相应的属性名就可以了。

3.在定义模型的时候,可以不写 __tablename__ ,那么 flask_sqlalchemy 会默认使用当前的模型的名字转换成小写来作为表的名字,并且如果这个模型的名字用到了多个单词并且使用了驼峰命名法,那么会在多个单词之间使用下划线来进行连接,虽然flask_sqlalchemy给我们提供了这个特性,但是不推荐使用。(增强代码可读性,提高团队合作效率)

# 2.创建模型类User
class User(db.Model):
    __tablename__ = 't_user'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(50))
    pwd = db.Column(db.String(50))

    def __repr__(self):
        return 'User:<username=%s, password=%s, id=%s>'.format(self.name, self.pwd, self.id)

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

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

  1. 删除数据库表:db.drop_all()

  2. 创建数据库表:db.create_all()

2.4 session的使用

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

2.5 添加数据

这时候就可以在数据库中看到已经生成了对应表了。

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

2.6 查询数据:

1.单表查询
查询数据不再是之前的session.query方法了,而是将query属性放在了db.Model上,所以查询就是通过“模型名.query”的方式进行查询了, query 就跟之前的sqlalchemy中的query方法是一样用的。

2.多表查询
如果查找数据涉及多个模型,只能使用db.session.query(模型名).all() 这种方式。

2.7 修改数据:

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

2.8 删除数据:

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

from flask import *
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)

# 数据库的配置变量
USERNAME = 'root'
PASSWORD = 'root'
HOSTNAME = 'localhost'
PORT = '3306'
DATABASE = 'flask_db'
DB_URI = 'mysql pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)

# 把连接数据库参数设置到 app中
app.config['SQLALCHEMY_DATABASE_URI'] = DB_URI

# 1.创建数据库连接
db = SQLAlchemy(app)


# 2.创建模型类User
class User(db.Model):
    __tablename__ = 't_user'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(50))
    pwd = db.Column(db.String(50))

    def __repr__(self):
        return 'User:<username=%s, password=%s, id=%s>'.format(self.name, self.pwd, self.id)


# 3.创建数据库表
# db.drop_all()
# db.create_all()


@app.route('/')
def index():  # put application's code here
    return render_template('index.html')


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


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


@app.route('/update')
def update():
    pass


@app.route('/delete')
def delete():
    name = request.args.get('name')
    user = User.query.filter(User.name == name).first()
    db.session.delete(user)
    db.session.commit()
    return "删除用户:{}成功".format(user.name)


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8888, debug=True)
学新通

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试flask的sqlalchemy</title>
</head>
<body>
<a href="/add?name=zs&pwd=123">新增操作</a><br>
<a href="/query?id=2">查询操作</a><br>
<a href="/update?id=2">修改操作</a><br>
<a href="/delete?name=zs">删除操作</a><br>
</body>
</html>

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgfiehe
系列文章
更多 icon
同类精品
更多 icon
继续加载