【测试平台开发】——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 @   Owen_ET  阅读(364)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
  1. 1 イエスタデイ(翻自 Official髭男dism) 茶泡饭,春茶,kobasolo
  2. 2 模様 (TV size ver.) Ivy to Fraudulent Game
  3. 3 河口恭吾
  4. 4 愛してる 高鈴
  5. 5 一生所爱 卢冠廷,莫文蔚
  6. 6 世间美好与你环环相扣 柏松
  7. 7 理想三旬 陈鸿宇
  8. 8 不浪漫罪名 王杰
  9. 9 樱花树下 张敬轩
  10. 10 因为你在 达闻西乐队,福禄寿FloruitShow
  11. 11 悬溺 葛东琪
不浪漫罪名 - 王杰
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 陈少琪

作曲 : 王杰

没有花 这刹那被破坏吗

没有花 这刹那被破坏吗

无野火都会温暖吗

无烟花一起庆祝好吗

若爱恋 彷似戏剧那样假

若爱恋 彷似戏剧那样假

如布景一切都美化

连相拥都参照主角吗

你说我未能定时 令你每天欢笑一次

你说我未能定时 令你每天欢笑一次

我没说出一句美丽台词

是你心中一种缺陷定义

流进了眼角里的刺

为何不浪漫亦是罪名 为何不轰烈是件坏事情

为何不浪漫亦是罪名 为何不轰烈是件坏事情

从来未察觉我每个动作 没有声都有爱你的铁证

为何苦不浪漫亦是罪名 为何总等待着特别事情

从来未察觉我语气动听 在我呼吸声早已说明

甚么都会用一生保证

没有花 这刹那被破坏吗

没有花 这刹那被破坏吗

无野火都会温暖吗

无烟花一起庆祝好吗

若爱恋 彷似戏剧那样假

若爱恋 彷似戏剧那样假

如布景一切都美化

连相拥都参照主角吗

你说我未能定时 令你每天欢笑一次

你说我未能定时 令你每天欢笑一次

我没说出一句美丽台词

是你心中一种缺陷定义

流进了眼角里的刺

为何不浪漫亦是罪名 为何不轰烈是件坏事情

为何不浪漫亦是罪名 为何不轰烈是件坏事情

从来未察觉我每个动作 没有声都有爱你的铁证

为何苦不浪漫亦是罪名 为何总等待著特别事情

从来未察觉我语气动听 在我呼吸声早已说明

什么都会用一生保证

为何不浪漫亦是罪名 为何不轰烈是件坏事情

为何不浪漫亦是罪名 为何不轰烈是件坏事情

从来未察觉我每个动作 没有声都有爱你的铁证

为何苦不浪漫亦是罪名 为何总等待著特别事情

从来未察觉我语气动听 在我呼吸声早已说明

什么都会用一生保证

点击右上角即可分享
微信分享提示