flask web框架学习(七、flask-sqlalchemy的扩展之MySQL)

本文详细介绍如何在Flask应用中使用Flask-SQLAlchemy扩展连接MySQL数据库,包括安装配置、模型定义、基本CRUD操作及查询技巧。

flask-sqlalchemy的扩展

  • 在Flask中使用mysql数据库,需要安装一个flask-sqlalchemy的扩展
    pip install flask-sqlalchemy
  • 要连接mysql数据库,仍需要安 pymysql
    pip install pymysql
  • flask 中使用flask-sqlalchemy的扩展
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)

class Config(object):
    """配置参数"""
    # sqlalchemy的配置参数
    SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:just@localhost:3306/flask_py"
    # 设置sqlalchemy自动更跟踪数据库
    SQLALCHEMY_TRACK_MODIFICATIONS = True

# 从配置对象中加载,配置参数
app.config.from_object(Config)

# 创建数据库sqlalchemy工具对象
db = SQLAlchemy(app)
# 创建数据库模型类
class Role(db.Model):
    """用户角色/身份表"""
    __tablename__ = "db_role"
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32),unique=True)
    role1 = db.relationship("User", backref="role")

class User(db.Model):
    """用户表"""
    __tablename__ = "db_user" # 指明数据库的表名
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True)
    email = db.Column(db.String(128), unique=True)
    password = db.Column(db.String(128))
    role_id = db.Column(db.Integer, db.ForeignKey("db_role.id"))

if __name__ == '__main__':
    # 清除数据库里的所有数据
    db.drop_all()
    # 创建所有的表
    db.create_all()
    # 创建对象
    role1 = Role(name="admin")
    role2 = Role(name="stuff")
    # session 记录对象任务
    db.session.add(role1)
    db.session.add(role2)
    # 提交任务到数据库
    db.session.commit()

    us1 = User(name='wang', email='wang@163.com', password='123456', role_id=role1.id)
    us2 = User(name='zhang', email='zhang@189.com', password='201512', role_id=role2.id)
    us3 = User(name='chen', email='chen@126.com', password='987654', role_id=role2.id)
    us4 = User(name='zhou', email='zhou@163.com', password='456789', role_id=role1.id)

    # 一次保存多条数据
    db.session.add_all([us1, us2, us3, us4])
    db.session.commit()

常用的SQLAlchemy字段类型

在这里插入图片描述

常用的SQLAlchemy列选项

在这里插入图片描述

常用的SQLAlchemy关系选项

在这里插入图片描述

数据库基本操作

# 创建数据库sqlalchemy工具对象
db = SQLAlchemy(app)

# 创建表: 
db.create_all()
# 删除表   
db.drop_all()

# 插入一条数据
ro1 = Role(name='admin')
db.session.add(ro1)
db.session.commit()  # 提交到数据库

# 一次插入多条数据
us1 = User(name='wang',email='wang@163.com',pswd='123456',role_id=ro1.id)
us2 = User(name='zhang',email='zhang@189.com',pswd='201512',role_id=ro2.id)
us3 = User(name='chen',email='chen@126.com',pswd='987654',role_id=ro2.id)
us4 = User(name='zhou',email='zhou@163.com',pswd='456789',role_id=ro1.id)

db.session.add_all([us1,us2,us3,us4])
db.session.commit()

# 查询:  
# filter_by精确查询

# 返回名字等于wang的所有人
User.query.filter_by(name='wang').all()

# first() 返回查询到的第一个对象
User.query.first()

# all()  返回查询到的所有对象
User.query.all()

# filter模糊查询,返回名字结尾字符为g的所有数据
User.query.filter(User.name.endswith('g')).all()

# get(),参数为主键,如果主键不存在没有返回内容
User.query.get()

# 逻辑非,返回名字不等于wang的所有数据。
User.query.filter(User.name!='wang').all()


# 逻辑与,需要导入and ,返回and ()条件满足的所有数据。
from sqlalchemy import and_
User.query.filter(and_(User.name!='wang', User.email.endswith('163.com'))).all()

# 逻辑或,需要导入or_
from sqlalchemy import or_
User.query.filter(or_(User.name!='wang',User.email.endswith('163.com'))).all()

# not_ 相当于取反
from sqlalchemy import not_
User.query.filter(not_(User.name=='chen')).all()

# 查询数据后删除
user = User.query.first()
db.session.delete(user)
db.session.commit()
User.query.all()

# 更新数据
user = User.query.first()
user.name = 'dong'
db.session.commit()
User.query.first()

# 使用update
User.query.filter_by(name='zhang').update({'name':'li'})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值