简单讲解一下flask_sqlalchemy,在用flask搭建网站时,肯定是要网页和与数据库交互数据的,我认为flask_sqlalchemy是基于一个类去映射数据库中的表,然后做一些增删改查,sqlalchemy和flask_sqlalchemy其实用法区别不大,可以去官网看看sqlalchemy文档https://docs.sqlalchemy.org/en/13/core/tutorial.html,这里就做一些flask_sqlalchemy的基本操作
如果已经安装了flask包还需要安装flask_sqlalchemy,控制台pip install flask_sqlalchemy
新建py文件(例如:app.py)
常用config说明
config配置选项 | 说明 |
SQLALCHEMY_DATABASE_URI | 数据库连接 示例1’mysql+mysql驱动名称://用户名:密码@主机:/数据库名 示例2: ‘sqlite:///db.sqlite3’’ |
SQLALCHEMY_ECHO | 调试设置为True |
SQLALCHEMY_POOL_SIZE | 数据库池的大小,默认值为5 |
SQLALCHEMY_POOL_TIMEOUT | 连接超时时间设置 |
SQLALCHEMY_TRACK_MODIFICATIONS | 如果设置成 True (默认情况),Flask-SQLAlchemy 将会追踪对象的修改并且发送信号。这需要额外的内存, 如果不必要的可以禁用它 |
常用数据类型说明
db | mysql | 类型 |
String | varchar | 不定长字符串 |
CHAR | char | 定长字符串 |
Float | FLOAT | 浮点型 |
Integer | INT | 整型 |
Text | TEXT | 文本 |
DateTime | DATETIME | 日期时间 |
引入模块
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
配置连接
app = Flask(__name__)
数据库连接
1.这个需要安装sqlite插件
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite3'```
2.mysql连接 'mysql+mysql驱动(mysqlconnector/pymysql都行)://用户名:密码@主机/数据库名称'
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqlconnector://root:pwd@localhost/sqlalchemy'
这次实例用第二种mysql连接方式
注意config里的-URI-不是URL
映射类
class User(db.Model):
__tablename__ = 'user' # 如果这里没注明表名,默认会取类名的小写
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(10))
age = db.Column(db.Integer)
# 以上属性相当于是数据库中的字段名
# 如果要插入记录需要添加构造方法
def __init__(self, username, age):
self.username = username
self.age = age
app.py完整代码如下
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+mysqlconnector://root:pwd@localhost/sqlalchemy'
app = Flask(__name__)
db = SQLAlchemy(app)
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(10))
age = db.Column(db.Integer)
update_at = db.Column(db.DateTime, default=datetime.now)
def __init__(self, username, age):
self.username = username
self.age = age
打开控制台做一些简单增删改查操作
- 增加记录
>>> from app import db
>>> from app import User
# 建表
>>> db.create_all()
# 添加记录
>>> user1 = User("王武", 21)
>>> db.session.add(user1)
>>> db.session.commit()
# 当然也可以一次性添加多条记录
>>> user2 = User("小红", 23)
>>> user3 = User("小明", 27)
>>> db.session.add_all([user2, user3])
>>> db.session.commit()
- 删除记录
user1 = User("王武", 21)
db.session.delete(user1)
de.session.commit()
# 删除记录和添加记录类似,可以配合一下查询过滤器filter()使用delete()
- 查询记录
# 查询所有记录
User.query.all()
# 通过主键查询
User.query.get(1) # 查询主键为1的记录
# 使用filter和filter_by过滤器查询
# filter参数:类名.属性(字段名) filter_by参数:属性(字段名)
User.query.filter(User.username == "王武").all()
User.query.filter(User.age > 18).all() # filter支持运算符 >= <= == !=
User.query.filter_by(username="王武").all() # filter_by不支持运算符
# 这里说一下all()和first()的区别
# all() 返回类型是列表 不管是一条还是多条
# first() 返回类型是对象 查询条件的第一条记录
# 限制查询
User.query.filter(User.age=18).offset(2).limit(3) # 跳过二条开始查询,输出3条
- 修改记录
User.query.filter_by(username="王武").update({"username":"王明"})
# 修改成功会返回1,失败返回0
db.session.commit()
有什么问题欢迎留言