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.all()
- 条件查询
- 类名.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)....单条或多条
- 类名.query.filter_by(条件).单条或多条
改(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()