【测试平台开发】——05Flask后端api开发实战(二)—— SqlAlchemy

SqlAlchemy

SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。
SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”。SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合;而对象集合的抽象又重要于表和行。因此,SQLAlchemy采用了类似于JavaHibernate的数据映射模型,而不是其他ORM框架采用的Active Record模型。不过,Elixir和declarative等可选插件可以让用户使用声明语法。
 

一、SqlAlchemy例子

安装:

pip install flask-SQLAlchemy

SqlAlchemy官方地址:https://flask-sqlalchemy.palletsprojects.com/en/2.x/quickstart/

配置数据库参考地址:https://docs.sqlalchemy.org/en/14/core/engines.html

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
# 配置数据库详细信息
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://scott:tiger@localhost/foo'
# 初始化一个db
db = SQLAlchemy(app)

# 使用db. 可以让类映射到数据库中的表
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return '<User %r>' % self.username

解析配置数据库详细信息:mysql+pymysql://scott:tiger@localhost/foo

【mysql】:使用的mysql数据库

【pymysql】:使用pymysql的引擎

【://scott】:数据库用户名

【:tiger】:数据库密码

【@localhost】:数据库地址

【/foo】:数据库的库名称

二、创建数据库

1、新建数据库

 

 

字符集选择utf8mb4,排序规则可不选自动生成如图。

2、创建用户

 

填写用户信息并保存

 

 

 

3、设置用户权限

 

 

选择新创建的数据库,并配置所有权限

 

 

三、数据库互联

官网:https://flask-sqlalchemy.palletsprojects.com/en/2.x/quickstart/

1、创建表和删除表

因为用的pymysql引擎,所以需要先进行安装:

pip install pymysql

执行代码:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
# 配置数据库详细信息
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:1234567@localhost:8881/2022.8.3Data'
# 初始化一个db
db = SQLAlchemy(app)

# 使用db. 可以让类映射到数据库中的表
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return '<User %r>' % self.username


if __name__ == '__main__':
    # 强制删除表
    db.drop_all()
    # 创建表的方法
    db.create_all()

2、表中插入数据

data = User(id='1', username='测试1', email='123@qq.com', email2='569@qq.com')
sessionData = db.session
sessionData.add(data)
sessionData.commit()

完整代码:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
# 配置数据库详细信息
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:1234567@localhost:8881/2022.8.3Data'
# 初始化一个db
db = SQLAlchemy(app)

# 使用db. 可以让类映射到数据库中的表
class User(db.Model):
    # 以下字段代码数据库中的表头
    # db.Integer是整型,primary_key代表主键,唯一标识是数据库的身份证
    id = db.Column(db.Integer, primary_key=True)
    # db.String(80),代表80个字符的字符串,unique代表不是唯一,nullable=False,代表必填项
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    email2 = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        return '<User %r>' % self.username

class Task(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), unique=True, nullable=False)


if __name__ == '__main__':
    # 强制删表
    db.drop_all()
    # 创建表的方法
    db.create_all()

    # 在远程数据库中创建表
    # 实例化User表
    data = User(id='1', username='测试1', email='123@qq.com', email2='569@qq.com')
    sessionData = db.session
    sessionData.add(data)
    sessionData.commit()

 

 

批量插入数据库数据:

    # 在远程数据库表中创建数据
    # 实例化User表
    for i in range(1, 21):
        data = User(username=f'测试{i}', email=f'123{i}@qq.com', email2=f'456{i}@qq.com')

        sessionData = db.session
        # 把类添加到sqlalchemy中
        sessionData.add(data)
        # 把操作提交
        sessionData.commit()

3、查询数据

User.query.filter_by(username='XXX').first()

User.query.all()

完整代码:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
# 配置数据库详细信息
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:1234567@localhost:8881/2022.8.3Data'
# 初始化一个db
db = SQLAlchemy(app)

# 使用db. 可以让类映射到数据库中的表
class User(db.Model):
    # 以下字段代码数据库中的表头
    # db.Integer是整型,primary_key代表主键,唯一标识是数据库的身份证
    id = db.Column(db.Integer, primary_key=True)
    # db.String(80),代表80个字符的字符串,unique=Ture代表不是唯一,nullable=False,代表必填项
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    email2 = db.Column(db.String(120), unique=True, nullable=False)

    def __repr__(self):
        # return '<User %r %r>' % (self.username,self.email)
        # return '<User {} {}>'.format(self.username,self.email)
        return f'<User {self.username} {self.email}>'

class Task(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80), unique=True, nullable=False)


if __name__ == '__main__':
    # 强制删表
    db.drop_all()
    # 创建表的方法
    db.create_all()

    # 在远程数据库表中创建数据
    # 实例化User表
    for i in range(1, 21):
        data = User(username=f'测试{i}', email=f'123{i}@qq.com', email2=f'456{i}@qq.com')

        sessionData = db.session
        # 把类添加到sqlalchemy中
        sessionData.add(data)
        # 把操作提交
        sessionData.commit()


    # 查询数据
    # 在表中查询数据,使用User.query
    # first获取第一个结果
    result  = User.query.filter_by(username='测试1').first()
    # 查询所有数据
    result = User.query.all()
    print(result)

 

查询一组元素中的指定元素:

result = User.query.all()
result = [i for i in result if '9' in i.username]
print(result)

 

4、更新数据

# 更新数据
# 筛查要修改的数据,然后对表数据进行修改,最后再提交
data = User.query.filter_by(username='测试11').first()
data.email = 'AAAAA@qq.com'
db.session.commit()

 

5、删除数据

    # 删除数据
    data = User.query.filter_by(username='测试20').first()
    session = db.session
    session.delete(data)
    session.commit()

 

四、自动化平台系列文章汇总

【测试平台开发】——开篇章节

 

posted @ 2022-08-04 14:51  Owen_ET  阅读(350)  评论(0编辑  收藏  举报