栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Flask学习笔记 ORM与Flask-SQLAlchemy扩展

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Flask学习笔记 ORM与Flask-SQLAlchemy扩展

1.ORM介绍

ORM又称"对象关系映射", 即Object Relation Mapping. 那到底什么是"对象关系映射"
Django框架中:
    模型类 <---> 表
    属性   <---> 字段
    对象  <---> 记录

# ORM优势与缺点
    # 优势:
        (2).省去自己拼写SQL,保证SQL语法的正确性
        (3).一次编写可以适配多个数据库
        (4).防止注入攻击
        (5).在数据库表名或字段名发生变化时,只需修改模型类的映射,无需修改数据库操作的代码(相比SQL的话,可能需要同步修改涉及到的每一个SQL语句)
    # 缺点:
        执行效率低下
    
# ORM框架
    - SQLAlchemy
    - Flask-SQLAlchemy
SQLAlchemy是python的包, Flask-SQLAlchemy是对SQLAlchemy的进一步封装, 以作为Flask框架的扩展适配Flask框架.

2.Flask-SQLAlchemy扩展

# 安装Flask-SQLAlchemy
pip install flask-sqlalchemy

# 连接数据库:
from flask import Flask
from common import db

app = Flask(__name__)
class Config(object):
    SQLALCHEMY_DATABASE_URI = 'mysql://root:admin123@127.0.0.1:3306/jiyunstus'
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SQLALCHEMY_ECHO = True

app.config.from_object(Config)
# 初始化数据库
db.init_app(app)

if __name__ == '__main__':
    app.run()


# 创建模型类
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __str__(self):
        return self.username



# common文件下init中初始化db对象,找个地方就行,防止导包循环

from flask_sqlalchemy import SQLAlchemy
db=SQLAlchemy()



# 创建迁移脚本
from common import db   
from cloudinfo.main import app   
from flask_migrate import MigrateCommand,Migrate
from flask_script import Manager
# 导入下你创建的模型类
from app.models import User


manage=Manager(app)
migrate=Migrate(app,db)
manage.add_command('db',MigrateCommand)

if __name__ == '__main__':
    manage.run()


# 执行迁移命令
# 写你迁移的脚本名
python script.py db init
python script.py db migrate
python script.py db upgrade

3.单表数据增删改查操作

3.1新增数据与事务

# 增加数据
use = User(id,username,password)
# 定义会话进行添加
db.session.add(use)
# 提交事务
db.session.commit()
# 注意: 增加数据, 修改数据及删除数据均需要提交事务
# 增加多条:
 db.session.add_all([use1, use2, use3])

3.2简单查询

# 简单查询
User.query.all()
User.query.get(1)
User.query.filter_by(username='name').first()

3.3更新数据

# 修改数据
User.query.filter_by(username='name').update({'password':'newdata'})
# 注意: 增加数据, 修改数据及删除数据均需要提交事务
db.session.commit()

3.4删除数据

# 删除数据
User.query.filter_by(username='name').delete()
# 注意: 增加数据, 修改数据及删除数据均需要提交事务
db.session.commit()
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/870374.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号