Flask-SQLAlchemy

Flask-SQLAlchemy# SQLAlchemy是一个基于Python实现的ORM框架,跟web框架无关,独立的# django的orm,sqlalchemy(大而重),peewee(小而轻)# 异步orm框架:GINO# Python界没有一个特别好的微服务框架:nameko# java:dubbo(阿里开源),springcloud# go:grpc,go-zero,go-micropip install flask-sqlalchemy1、基本配置配置选项说明
摘要由CSDN通过智能技术生成

Flask-SQLAlchemy

# SQLAlchemy是一个基于Python实现的ORM框架,跟web框架无关,独立的
# django的orm,sqlalchemy(大而重),peewee(小而轻)
# 异步orm框架:GINO
# Python界没有一个特别好的微服务框架:nameko
# java:dubbo(阿里开源),springcloud
# go:grpc,go-zero,go-micro
pip install flask-sqlalchemy
1、基本配置
配置选项 说明
SQLALCHEMY_DATABASE_URI 连接数据库。示例:mysql://username:password@host/post/db?charset=utf-8
SQLALCHEMY_BINDS 一个将会绑定多种数据库的字典。 更多详细信息请看官文 绑定多种数据库.
SQLALCHEMY_ECHO 调试设置为true
SQLALCHEMY_POOL_SIZE 数据库池的大小,默认值为5。
SQLALCHEMY_POOL_TIMEOUT 连接超时时间
SQLALCHEMY_POOL_RECYCLE 自动回收连接的秒数。
SQLALCHEMY_MAX_OVERFLOW 控制在连接池达到最大值后可以创建的连接数。当这些额外的 连接回收到连接池后将会被断开和抛弃。
SQLALCHEMY_TRACK_MODIFICATIONS 如果设置成 True (默认情况),Flask-SQLAlchemy 将会追踪对象的修改并且发送信号。这需要额外的内存, 如果不必要的可以禁用它。

操作数据库需要先创建一个db对象,通常写在exts.py文件里。

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

flask项目一般将数据库配置写入configs.py文件里面,配置在创建引擎前需写好,不要在程序运行时修改配置,如下。

HOST = '127.0.0.1'
PORT = '3306'
DATABASE = 'flask1'
USERNAME = 'root'
PASSWORD = '123456'

DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8".format(username=USERNAME,password=PASSWORD, host=HOST,port=PORT, db=DATABASE)

SQLALCHEMY_DATABASE_URI = DB_URI
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ECHO = True

写完数据库配置后需要和app绑定,app.py文件里写flask应用的创建和蓝图的注册等等,如下:

from flask import Flask
import configs
from exts import db

app = Flask(__name__)
# 加载配置文件
app.config.from_object(configs)
# db绑定app
db.init_app(app)
2、SQLAlchemy的数据类型

下图显示了最常用的SQLAlchemy列的类型:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-udGPQuRg-1636029658793)(20161107010358428)]

下图显示了最常用的SQLAlchemy列选项:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FpFLjBKw-1636029658794)(20161107010602160)]

Flask-SQLAlchemy 要求每个模型都要定义主键,这一列经常命名为 id。

下图展示了SQLAlchemy提供的过滤器和查询函数:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-69Yh4qM7-1636029658796)(20161107022638126)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XDEwUEgq-1636029658797)(20161107023259291)]

3、示例
# -*- coding:utf-8 -*-
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
 
app = Flask(__name__)
# url的格式为:数据库的协议://用户名:密码@ip地址:端口号(默认可以不写)/数据库名
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:mysql@localhost/first_flask"
# 动态追踪数据库的修改. 性能不好. 且未来版本中会移除. 目前只是为了解决控制台的提示才写的
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
# 创建数据库的操作对象
db = SQLAlchemy(app)
 
 
class Role(db.Model):
 
    __tablename__ = "roles"
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(16),unique=True)
    # 给Role类创建一个uses属性,关联users表。
    # backref是反向的给User类创建一个role属性,关联roles表。这是flask特殊的属性。
    users = db.relationship('User',backref="role")
    # 相当于__str__方法。
    def __repr__(self):
        return "Role: %s %s" % (self.id,self.name)
 
 
class User(db.Model):
    # 给表重新定义一个名称,默认名称是类名的小写,比如该类默认的表名是user。
    __tablename__ = "users"
    id = db.Column(db.Integer,primary_key=True)
    name = db.Column(db.String(16),unique=True)
    email = db.Column(db.String(32),unique=True)
    password = db.Column(db.String(16)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值