0
点赞
收藏
分享

微信扫一扫

Flask-SQLAlchemy 学习笔记

Flask-SQLAlchemy 学习笔记

简介

  • Flask-SQLAlchemy 是一个为Flask 应用增加 SQLAlchemy 支持的扩展。简化在 Flask 中 SQLAlchemy 的使用。
  • ORM 对象关系映射
    • 参考 blog.csdn.net/u010947534/article/details/90669452

安装

  • pip install Flask-SQLAlchemy

使用

1. 建立数据库连接

# 1. 导入相关的包
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

# 2. 创建flask app对象
app = Flask(__name__)

# 3. 为app对象配置数据库链接, 以MSSqlServer 为例
app.config["SQLALCHEMY_DATABASE_URI"] = "mssql+pymssql://username:pwd@hostname:port/dbname"
# 下面这步配置建议设置
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True

# 4. 将app和SQLAlchemy 绑定
db = SQLAlchemy(app)

常用配置项

  • SQLALCHEMY_DATABASE_URI
  • SQLALCHEMY_TRACK_MODIFICATIONS
  • SQLALCHEMY_BINDS
  • SQLALCHEMY_POOL_SIZE

    连接字符串格式

  • 参考链接 docs.sqlalchemy.org/en/14/core/engines.html#database-urls

    "dialect+driver://username:password@host:port/databsename?charset=utf8"
  • dialect: 数据库的实现, 即哪一种数据库
  • driver: python 对应数据库的驱动, 不设置选择默认驱动
  • charset: 设置编码

2. 创建/删除 库

  • 这个好像需要手动创建,或者执行sql语句

3. 创建/删除 表

定义表

  • 创建一个类,继承 db.Model, 类名即表名
    • 创建的表名称会被自动转换为小写,驼峰转换为下划线
    • 固定表名可以指定变量 tablename 的值
  • 用 Column 来定义一列。列名就是您赋值给那个变量的名称
  • 列支持的数据类型
    • 参考链接 <http://www.pythondoc.com/flask-sqlalchemy/models.html#id2>
    • 据说还支持json
  • 常用关键字参数

    • primary_key : 是否主键
    • autoincrement : 是否自增
    • nullable : 是否允许为空
    • unique : 是否允许重复
    • default: 默认值

      class User(db.Model):
      userid = Column(Integer,primary_key=True) # 设置为主键
      username = Column(String(80), unique=True) # 唯一
      email = Column(String(120), unique=True, nullable=False) # 不可以为空

    #定义构造方法用于接收数据
    def init(self, username, email):
    self.username = username
    self.email = email

创建/删除 表

# 创建
db.creat_all()
# 删除
db.drop_all()

4. 增, 删, 改, 查(CRUD)

增(Create)

  • 创建 Python 对象, 实例化一个对象
  • 把它添加到会话
  • 提交会话
  • 关闭会话
    user1 = User("zhansan","zhansan@test.com")
    user2 = User("lisi","lisi@test.com")
    db.session.add(user1)
    db.session.add(user2)
    # 或者 db.session.add_all([user1,user2])
    db.session.commit()
    db.session.close()

查(Read)

  • 查询全部数据
    • 类名.query.all()
      res = User.query.all()
      for r in res:
      print(r.userID, r.username, r.email)
  • 条件查询
    • 类名.query.filter_by(条件).单条或多条
      # 单条
      res = User.query.filter_by(userID=1).first()
      print(res)
      # 多条
      r = User.query.filter_by(sex="man").all()
      for r in res:
      print(r.userID, r.username, r.email)
    • 多条件组合
    • 类名.query.filter_by(条件1).filter_by(条件2).filter_by(条件3)....单条或多条

改(Update)

  • 方式一

    • 查询需要的数据,保存到变量
    • 通过变量.属性的方式修改数据
    • 提交session

      res = User.query.filter_by(userID=1).first()
      res.email="haha@tem.com"
      db.session.commit()
      db.session.close()
  • 方式二
    • 查询到数据后,直接执行 update 操作
    • 提交session
      User.query.filter_by(userID=1).update({"email":"zhangshan@test.com"})
      db.session.commit()
      db.session.close()

删(Delete)

  • 方式一
    • 查询需要的数据,保存到变量
    • 执行 delete 操作
    • 提交session
      res = User.query.filter_by(userID=1).first()
      db.session.delete(res)
      db.session.commit()
      db.session.close()
  • 方式二
    • 查询到数据后,直接执行 delete 操作
    • 提交session
      User.query.filter_by(userID=3).delete()
      db.session.commit()
      db.session.close()
举报

相关推荐

0 条评论