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

Flask结合flask

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

Flask结合flask

Flask结合flask_sqlalchemy
  • 一、flask_sqlalchemy是什么?
  • 二、使用指南
    • 1.引入库
    • 2.实例:单表操作应用
    • 3.实例:多表结合应用(外键)
  • 三、常用操作
  • 四、api总结


一、flask_sqlalchemy是什么?

flask本身没有内置orm框架,需要依赖第三方模块,这里介绍flask_sqlalchemy,而flask_sqlalchemy是一个flask的扩展,本质上是对sqlalchemy的进一步封装,当然也需要sqlalchemy的支持,使用起来和本来的sqlalchemy的orm是一样的。本文主要介绍flask_sqlalchemy的使用以及如何在flask中使用orm。
不知道orm的小伙伴,这里我简单的说明一下。ORM技术:Object-Relational Mapping,把关系数据库的表结构映射到对象上。有点类似于springboot项目中的pojo、entity包下的class对象类。

二、使用指南 1.引入库
pip3 install sqlalchemy
pip3 install Flask-SQLAlchemy
2.实例:单表操作应用
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATAbase_URI'] = 'mysql://root:123456@127.0.0.1/mytest' #换成你的数据库信息
db = SQLAlchemy(app)

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 __init__(self, username, email):
        self.username = username
        self.email = email
	# 返回函数
    def __repr__(self):
        return '' % self.username

上述对象一旦创建,这个对象就包含 sqlalchemy 和 sqlalchemy.orm 中的所有函数和助手。它还提供一个名为 Model 的类,用于作为声明模型时的 delarative 基类。

from yourapplication import db #引入上个文件中的db对象
db.create_all() #创建数据库和表
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
from yourapplication import User #引入创建好的orm映射对象
admin = User('admin', 'admin@example.com')#创建实例1
guest = User('guest', 'guest@example.com')#创建实例2
db.session.add(admin) 	#将创建好的对象插入数据库
db.session.add(guest)	#将创建好的对象插入数据库
db.session.commit()		#提交操作
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
users = User.query.all() #类似于select * from .....
print(users)
[, ]
admin = User.query.filter_by(username='admin').first()#类似于select * from .... where username = "admin"
print(admin)

3.实例:多表结合应用(外键)
from datetime import datetime


class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(80))
    body = db.Column(db.Text)
    pub_date = db.Column(db.DateTime)
    category_id = db.Column(db.Integer, db.ForeignKey('category.id')) #定义ForeignKey外键
    category = db.relationship('Category',backref=db.backref('posts', lazy='dynamic'))#posts 作为动态关系

    def __init__(self, title, body, category, pub_date=None):
        self.title = title
        self.body = body
        if pub_date is None:
            pub_date = datetime.utcnow()
        self.pub_date = pub_date
        self.category = category

    def __repr__(self):
        return '' % self.title

class Category(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))

    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return '' % self.name

创建了Post和Category两个对象,其中Post的category属性放的是category对象。

# 创建对象并插入数据库
py = Category('Python')
p = Post('Hello Python!', 'Python is pretty cool', py)
db.session.add(py)
db.session.add(p)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
py.posts.all()
[]
三、常用操作

1.增

 user = User()
    user.username = 'fuyong'
    user.password = '123'
    # 将新创建的用户添加到数据库会话中
    db.session.add(user)
    # 将数据库会话中的变动提交到数据库中, 如果不commit, 数据库中是没有变化的.
    db.session.commit()

2.删

# 获取用户对象
    user = User.query.filter_by(id=1).first() #查询出id=1的用户
    # 删除用户
    db.session.delete(user)
    #提交数据库会话
    db.session.commit()

3.改

 	# 获取用户对象
    user = User.query.filter_by(id=2).first()
    # 直接赋值更新数据
    user.password = '123567'
    #提交数据库会话
    db.session.commit()

4.查

 # 查询所有用户
    users_list = User.query.all()
    # 查询用户名称为 fuyong 的第一个用户, 并返回用户实例, 因为之前定义数据库的时候定义用户名称唯一, 所以数据库中用户名称为 test 的应该只有一个.
    user = User.query.filter_by(username='fuyong').first()
    # or
    user = User.query.filter(User.username == 'fuyong').first()
    # 模糊查询, 查找用户名以abc 结尾的所有用户
    users_list = User.query.filter(User.username.endsWith('g')).all()
    # 查询用户名不是 fuyong 的第一个用户
    user = User.query.filter(User.username != 'fuyong').first()
四、api总结
# 原生sql语句操作
sql = 'select * from user'
result = db.session.execute(sql)

# 查询全部
User.query.all()
# 主键查询
User.query.get(1)
# 条件查询
User.query.filter_by(User.username='name')
# 多条件查询
from sqlalchemy import and_
User.query.filter_by(and_(User.username =='name',User.password=='passwd'))
# 比较查询
User.query.filter(User.id.__lt__(5)) # 小于5
User.query.filter(User.id.__le__(5)) # 小于等于5
User.query.filter(User.id.__gt__(5)) # 大于5
User.query.filter(User.id.__ge__(5)) # 大于等于5
# in查询
User.query.filter(User.username.in_('A','B','C','D'))
# 排序
User.query.order_by('age') # 按年龄排序,默认升序,在前面加-号为降序'-age'
# 限制查询
User.query.filter(age=18).offset(2).limit(3)  # 跳过二条开始查询,限制输出3条
# 增加
use = User(id,username,password)
db.session.add(use)
db.session.commit() 
# 删除
User.query.filter_by(User.username='name').delete()
# 修改
User.query.filter_by(User.username='name').update({'password':'newdata'})
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/303757.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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