Python + Flask ORM实现增删改查
1. 背景介绍
SQLAlchemy 以 ORM 为核心基础提供可选对象关系映射能力。
(1). ORM 提供一个附加的配置层,允许用户自定义的 Python 类进行对象关系映射,通过 session 会话与数据库进行交互。
(2). ORM 扩展了核心级别的 SQL 表达式语言,允许按照用户定义的对象组合和调用 SQL 查询。
(3). Flask-SQLAlchemy 使用起来非常有趣,对于基本应用十分容易使用,并且对于大型项目易于扩展。
(4). 常见情况下对于只有一个 Flask 应用,所有您需要做的事情就是创建 Flask 应用。
(5). 选择加载配置接着创建 SQLAlchemy 对象时候把 Flask 应用传递给它作为参数。
2. 注意事项
连接 mysql 的 client 如果没有安装成功,需要手动来安装对应 python 版本的 mysqlclient.***.whl 文件。
3. 安装依赖
使用 pip 安装以下依赖模块
python -m pip install flask==1.1.2 python -m pip install flask_migrate==2.7.0 python -m pip install flask_sqlalchemy python -m pip install flask_script
4. 实战代码
今天的分享将通过简单的增删改查来演示 ORM 的效果。
代码如下:
from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_migrate import MigrateCommand from flask_migrate import Migrate from flask_script import Manager,Server #实例化一个Flask 对象 app = Flask(__name__) #设置连接数据库的配置,这是以mysql db 为示例来讲解 app.config['SQLALCHEMY_DATABASE_URI']="mysql://root:test@127.0.0.1:3306/dbtest1" #如果设置为True,将跟踪对象的修改并发出信号,默认设置为None app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False #查询时会显示原始SQL语句 app.config['SQLALCHEMY_ECHO']=True #这个对象就包含 sqlalchemy 和 sqlalchemy.orm 中的所有函数和助手 db = SQLAlchemy(app) manager = Manager(app) Migrate(app,db) #创建数据库映射命令 manager.add_command('db',MigrateCommand) #创建启动命令 manager.add_command('start',Server(port=8000,use_debugger=True)) class Role(db.Model):#提供一个名为 Model 的类,用于作为声明模型时的 delarative 基类 __tablename__ = 'roles' #给表起名 id = db.Column(db.Integer,primary_key=True) name = db.Column(db.String(64),unique=True) us = db.relationship("User",backref="role") icon = db.Column(db.String(40),default='default.jpg') def __repr__(self):#用于显示一个可读字符串 return "Role:%s" %self.name class User(db.Model): __tablename__ = 'users' #给表起名 id=db.Column(db.Integer,primary_key=True) name = db.Column(db.String(64),unique=True,index=True) email = db.Column(db.String(64),unique=True) pswd = db.Column(db.String(64)) role_id=db.Column(db.Integer,db.ForeignKey('roles.id')) def __repr__(self): return "User:%s"% self.name if __name__ == '__main__': # db.drop_all() # db 对象调用 SQLAlchemy.drop_all() 方法来删除表: # db.create_all() # db 对象调用 SQLAlchemy.create_all() 方法来创建表: # manager.run() #创建 role1=Role(name="admin") role2=Role(name="test") db.session.add(role1) db.session.commit() db.session.add(role2) db.session.commit() #必须提交会话,但是没有必要在每个请求后删除它(session),Flask-SQLAlchemy 会帮您完成删除操作 user1=User(name="wang",email="test1@126.com",pswd="1234",role_id=role1.id) user2=User(name="test",email="test2@126.com",pswd="1234",role_id=role2.id) db.session.add_all([user1,user2]) db.session.commit() #查询 user1=User.query.filter_by(name="wang") roles=Role.query.all() for role in roles: print(role.name,role.id) #删除 user=User.query.first() db.session.delete(user) db.session.commit() print(User.query.all()) print("*") print(user) #更新 user=User.query.first() user.name="test" db.session.commit() print(User.query.first())
欢迎关注【无量测试之道】公众号,回复【领取资源】
Python+Unittest框架API自动化、
Python+Unittest框架API自动化、
Python+Pytest框架API自动化、
Python+Pandas+Pyecharts大数据分析、
Python+Selenium框架Web的UI自动化、
Python+Appium框架APP的UI自动化、
Python编程学习资源干货、
Vue前端组件化框架开发、
资源和代码 免费送啦~
文章下方有公众号二维码,可直接微信扫一扫关注即可。
备注:我的个人公众号已正式开通,致力于IT互联网技术的分享。
包含:数据分析、大数据、机器学习、测试开发、API接口自动化、测试运维、UI自动化、性能测试、代码检测、编程技术等。
微信搜索公众号:“无量测试之道”,或扫描下方二维码:
添加关注,让我们一起共同成长!