Flask结合flask_sqlalchemy教程


一、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 '<User %r>' % 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)
[<User u'admin'>, <User u'guest'>]
admin = User.query.filter_by(username='admin').first()#类似于select * from .... where username = "admin"
print(admin)
<User u'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 '<Post %r>' % 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 '<Category %r>' % 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()
[<Post 'Hello Python!'>]

三、常用操作

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'})
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 安装FlaskFlask_SQLAlchemy 首先,在命令行中使用pip安装FlaskFlask_SQLAlchemy: ``` pip install Flask Flask_SQLAlchemy ``` 2. 创建Flask应用程序 在Python文件中导入FlaskSQLAlchemy模块: ```python from flask import Flask from flask_sqlalchemy import SQLAlchemy ``` 创建Flask应用程序: ```python app = Flask(__name__) ``` 3. 配置数据库 在Flask应用程序中配置数据库,可以使用SQLite、MySQL、PostgreSQL等不同类型的数据库。 ```python app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False ``` 这里我们使用SQLite数据库,并且禁用了对模型修改的跟踪。 4. 初始化SQLAlchemyFlask应用程序中初始化SQLAlchemy: ```python db = SQLAlchemy(app) ``` 5. 创建模型 创建一个模型类,定义数据表的结构: ```python 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 ``` 这里我们定义了一个User类,它继承自db.Model类,表示它是一个数据库模型。 User类中定义了三个属性:id、username和email,分别表示用户的ID、用户名和邮箱。其中,id属性是一个自增的整数类型,是数据表的主键;username和email属性分别是字符串类型,是唯一的、不可为空的。 6. 创建数据表 使用db.create_all()方法来创建数据表: ```python db.create_all() ``` 7. 添加数据 ```python user1 = User(username='Alice', email='alice@example.com') user2 = User(username='Bob', email='bob@example.com') db.session.add(user1) db.session.add(user2) db.session.commit() ``` 8. 查询数据 ```python users = User.query.all() ``` 9. 修改数据 ```python user = User.query.filter_by(username='Alice').first() user.email = 'alice@example.org' db.session.commit() ``` 10. 删除数据 ```python user = User.query.filter_by(username='Alice').first() db.session.delete(user) db.session.commit() ``` 11. 关闭数据库连接 ```python db.session.close() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值