【测试平台开发】——05Flask后端api开发实战(二)—— SqlAlchemy
SqlAlchemy
SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”。SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合;而对象集合的抽象又重要于表和行。因此,SQLAlchemy采用了类似于Java里Hibernate的数据映射模型,而不是其他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()
四、自动化平台系列文章汇总
不积跬步,无以致千里;不集小流,无以成江海。
如转载本文,请还多关注一下我的博客:https://www.cnblogs.com/Owen-ET/;
我的Github地址:https://github.com/Owen-ET————————————
无善无恶心之体, 有善有恶意之动, 知善知恶是良知, 为善去恶是格物。