简单讲解一下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

打开控制台做一些简单增删改查操作

  1. 增加记录
>>> 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()
  1. 删除记录
user1 = User("王武", 21)
db.session.delete(user1)
de.session.commit()
# 删除记录和添加记录类似,可以配合一下查询过滤器filter()使用delete()
  1. 查询记录
# 查询所有记录
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条
  1. 修改记录
User.query.filter_by(username="王武").update({"username":"王明"})
# 修改成功会返回1,失败返回0
db.session.commit()

有什么问题欢迎留言