flask sqlalchemy

Flask数据库操作及Flask-SQLAlchemy Flask数据库操作-Flask-SQLAlchemy 阅读详情

SQLAlchemy映射构建
1 简介
SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。

SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”。

SQLAlchemy首次发行于2006年2月,并迅速地在Python社区中最广泛使用的ORM工具之一,不亚于Django的ORM框架。

Flask-SQLAlchemy是在Flask框架的一个扩展,其对SQLAlchemy进行了封装,目的于简化在 Flask 中 SQLAlchemy 的 使用,提供了有用的默认值和额外的助手来更简单地完成日常任务。

2 安装
安装Flask-SQLAlchemy

pip install flask-sqlalchemy
如果使用的是MySQL数据库,还需要安装MySQL的Python客户端库

pip install mysqlclient
3 数据库连接设置
在Flask中使用Flask-SQLAlchemy需要进行配置,主要配置以下几项:

SQLALCHEMY_DATABASE_URI 数据库的连接信息

Postgres:

postgresql://user:password@localhost/mydatabase
MySQL:

mysql://user:password@localhost/mydatabase
Oracle:

oracle://user:password@127.0.0.1:1521/sidname
SQLite (注意开头的四个斜线):

sqlite:////absolute/path/to/foo.db
SQLALCHEMY_TRACK_MODIFICATIONS 在Flask中是否追踪数据修改

SQLALCHEMY_ECHO 显示生成的SQL语句,可用于调试

这些配置参数需要放在Flask的应用配置(app.config)中。

from flask import Flask

app = Flask(name)

class Config(object):
SQLALCHEMY_DATABASE_URI = ‘mysql://root:mysql@127.0.0.1:3306/toutiao’
SQLALCHEMY_TRACK_MODIFICATIONS = False
SQLALCHEMY_ECHO = True

app.config.from_object(Config)
其他配置参考如下:

名字 备注
SQLALCHEMY_DATABASE_URI 用于连接的数据库 URI 。例如:sqlite:////tmp/test.dbmysql://username:password@server/db
SQLALCHEMY_BINDS 一个映射 binds 到连接 URI 的字典。更多 binds 的信息见用 Binds 操作多个数据库。
SQLALCHEMY_ECHO 如果设置为Ture, SQLAlchemy 会记录所有 发给 stderr 的语句,这对调试有用。(打印sql语句)
SQLALCHEMY_RECORD_QUERIES 可以用于显式地禁用或启用查询记录。查询记录 在调试或测试模式自动启用。更多信息见get_debug_queries()。
SQLALCHEMY_NATIVE_UNICODE 可以用于显式禁用原生 unicode 支持。当使用 不合适的指定无编码的数据库默认值时,这对于 一些数据库适配器是必须的(比如 Ubuntu 上 某些版本的 PostgreSQL )。
SQLALCHEMY_POOL_SIZE 数据库连接池的大小。默认是引擎默认值(通常 是 5 )
SQLALCHEMY_POOL_TIMEOUT 设定连接池的连接超时时间。默认是 10 。
SQLALCHEMY_POOL_RECYCLE 多少秒后自动回收连接。这对 MySQL 是必要的, 它默认移除闲置多于 8 小时的连接。注意如果 使用了 MySQL , Flask-SQLALchemy 自动设定 这个值为 2 小时。
4 模型类字段与选项
字段类型
类型名 python中类型 说明
Integer int 普通整数,一般是32位
SmallInteger int 取值范围小的整数,一般是16位
BigInteger int或long 不限制精度的整数
Float float 浮点数
Numeric decimal.Decimal 普通整数,一般是32位
String str 变长字符串
Text str 变长字符串,对较长或不限长度的字符串做了优化
Unicode unicode 变长Unicode字符串
UnicodeText unicode 变长Unicode字符串,对较长或不限长度的字符串做了优化
Boolean bool 布尔值
Date datetime.date 时间
Time datetime.datetime 日期和时间
LargeBinary str 二进制文件
列选项
选项名 说明
primary_key 如果为True,代表表的主键
unique 如果为True,代表这列不允许出现重复的值
index 如果为True,为这列创建索引,提高查询效率
nullable 如果为True,允许有空值,如果为False,不允许有空值
default 为这列定义默认值
关系选项
选项名 说明
backref 在关系的另一模型中添加反向引用
primary join 明确指定两个模型之间使用的联结条件
uselist 如果为False,不使用列表,而使用标量值
order_by 指定关系中记录的排序方式
secondary 指定多对多关系中关系表的名字
secondary join 在SQLAlchemy中无法自行决定时,指定多对多关系中的二级联结条件
5 构建模型类映射
例用虚拟机中已有的头条数据库,构建模型类映射,以下面三张表为例

CREATE TABLE user_basic (
user_id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘用户ID’,
account varchar(20) COMMENT ‘账号’,
email varchar(20) COMMENT ‘邮箱’,
status tinyint(1) NOT NULL DEFAULT ‘1’ COMMENT ‘状态,是否可用,0-不可用,1-可用’,
mobile char(11) NOT NULL COMMENT ‘手机号’,
password varchar(93) NULL COMMENT ‘密码’,
user_name varchar(32) NOT NULL COMMENT ‘昵称’,
profile_photo varchar(128) NULL COMMENT ‘头像’,
last_login datetime NULL COMMENT ‘最后登录时间’,
is_media tinyint(1) NOT NULL DEFAULT ‘0’ COMMENT ‘是否是自媒体,0-不是,1-是’,
is_verified tinyint(1) NOT NULL DEFAULT ‘0’ COMMENT ‘是否实名认证,0-不是,1-是’,
introduction varchar(50) NULL COMMENT ‘简介’,
certificate varchar(30) NULL COMMENT ‘认证’,
article_count int(11) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘发文章数’,
following_count int(11) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘关注的人数’,
fans_count int(11) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘被关注的人数’,
like_count int(11) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘累计点赞人数’,
read_count int(11) unsigned NOT NULL DEFAULT ‘0’ COMMENT ‘累计阅读人数’,
PRIMARY KEY (user_id),
UNIQUE KEY mobile (mobile),
UNIQUE KEY user_name (user_name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘用户基本信息表’;

CREATE TABLE user_profile (
user_id bigint(20) unsigned NOT NULL COMMENT ‘用户ID’,
gender tinyint(1) NOT NULL DEFAULT ‘0’ COMMENT ‘性别,0-男,1-女’,
birthday date NULL COMMENT ‘生日’,
real_name varchar(32) NULL COMMENT ‘真实姓名’,
id_number varchar(20) NULL COMMENT ‘身份证号’,
id_card_front varchar(128) NULL COMMENT ‘身份证正面’,
id_card_back varchar(128) NULL COMMENT ‘身份证背面’,
id_card_handheld varchar(128) NULL COMMENT ‘手持身份证’,
create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘创建时间’,
update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘更新时间’,
register_media_time datetime NULL COMMENT ‘注册自媒体时间’,
area varchar(20) COMMENT ‘地区’,
company varchar(20) COMMENT ‘公司’,
career varchar(20) COMMENT ‘职业’,
PRIMARY KEY (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘用户资料表’;

CREATE TABLE user_relation (
relation_id bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘主键id’,
user_id bigint(20) unsigned NOT NULL COMMENT ‘用户ID’,
target_user_id bigint(20) unsigned NOT NULL COMMENT ‘目标用户ID’,
relation tinyint(1) NOT NULL DEFAULT ‘0’ COMMENT ‘关系,0-取消,1-关注,2-拉黑’,
create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘创建时间’,
update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT ‘更新时间’,
PRIMARY KEY (relation_id),
UNIQUE KEY user_target (user_id, target_user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘用户关系表’;
首先需要创建SQLAlchemy对象:

方式一:

db = SQLAlchemy(app)
方式二:

db = SQLAlchemy()
db.init_app(app)
注意此方式在单独运行调试时,对数据库操作需要在Flask的应用上下文中进行,即

with app.app_context():
User.query.all()
定义模型类

class User(db.Model):
“”"
用户基本信息
“”"
tablename = ‘user_basic’

class STATUS:
    ENABLE = 1
    DISABLE = 0

id = db.Column('user_id', db.Integer, primary_key=True, doc='用户ID')
mobile = db.Column(db.String, doc='手机号')
password = db.Column(db.String, doc='密码')
name = db.Column('user_name', db.String, doc='昵称')
profile_photo = db.Column(db.String, doc='头像')
last_login = db.Column(db.DateTime, doc='最后登录时间')
is_media = db.Column(db.Boolean, default=False, doc='是否是自媒体')
is_verified = db.Column(db.Boolean, default=False, doc='是否实名认证')
introduction = db.Column(db.String, doc='简介')
certificate = db.Column(db.String, doc='认证')
article_count = db.Column(db.Integer, default=0, doc='发帖数')
following_count = db.Column(db.Integer, default=0, doc='关注的人数')
fans_count = db.Column(db.Integer, default=0, doc='被关注的人数(粉丝数)')
like_count = db.Column(db.Integer, default=0, doc='累计点赞人数')
read_count = db.Column(db.Integer, default=0, doc='累计阅读人数')

account = db.Column(db.String, doc='账号')
email = db.Column(db.String, doc='邮箱')
status = db.Column(db.Integer, default=1, doc='状态,是否可用')

class UserProfile(db.Model):
“”"
用户资料表
“”"
tablename = ‘user_profile’

class GENDER:
    MALE = 0
    FEMALE = 1

id = db.Column('user_id', db.Integer, primary_key=True, doc='用户ID')
gender = db.Column(db.Integer, default=0, doc='性别')
birthday = db.Column(db.Date, doc='生日')
real_name = db.Column(db.String, doc='真实姓名')
id_number = db.Column(db.String, doc='身份证号')
id_card_front = db.Column(db.String, doc='身份证正面')
id_card_back = db.Column(db.String, doc='身份证背面')
id_card_handheld = db.Column(db.String, doc='手持身份证')
ctime = db.Column('create_time', db.DateTime, default=datetime.now, doc='创建时间')
utime = db.Column('update_time', db.DateTime, default=datetime.now, onupdate=datetime.now, doc='更新时间')
register_media_time = db.Column(db.DateTime, doc='注册自媒体时间')

area = db.Column(db.String, doc='地区')
company = db.Column(db.String, doc='公司')
career = db.Column(db.String, doc='职业')

class Relation(db.Model):
“”"
用户关系表
“”"
tablename = ‘user_relation’

class RELATION:
    DELETE = 0
    FOLLOW = 1
    BLACKLIST = 2

id = db.Column('relation_id', db.Integer, primary_key=True, doc='主键ID')
user_id = db.Column(db.Integer, doc='用户ID')
target_user_id = db.Column(db.Integer, doc='目标用户ID')
relation = db.Column(db.Integer, doc='关系')
ctime = db.Column('create_time', db.DateTime, default=datetime.now, doc='创建时间')
utime = db.Column('update_time', db.DateTime, default=datetime.now, onupdate=datetime.now, doc='更新时间')
Flask框架中SQLAlchemy的使用方法 config.py。 阅读详情

相关推荐

【Flask】什么是Flask-SQLAlchemy?

目录 ORM: SQLAlchemy: Flask-SQLAlchemy: 安装及配置: Flask-SQLAlchemy对数据库的操作: 在认识Flask-SQLAlchemy之前,先要了解ORM和SQLAlchemy。 ORM: 概念 ORM:对象关系映射,英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping) 产生背景:...

高岩 is me 859

flask-sqlalchemy扩展

1. 基本使用 1.1 扩展介绍 1.1.1 认识flask-sqlalchemy Flask-SQLAlchemy是一个为Flask应用增加***SQLAlchemy***支持的扩展。它致力于简化在Flask中***SQLAlchemy***的使用 SQLAlchemy***是目前python最强大的***ORM框架,功能全面,使用简单 ORM优缺点 优点 有语法提示,省去自己拼写SQL,保证语法的正确性 orm提供方言功能(dialect,可以转化为多种数据库的语法),减少学习成本 面向对象,可

weixin_46072106的博客 1978

Python3中Flask使用flask_sqlalchemy的的问题以及解决

(一) Python3在flask_sqlalchemy中相比改动了一些比如模块的导入。 在Python2中应该是 from flask.ext.sqlalchemy impot SQLAlchemy 虽然在Python3中这样使用其实不会错但是Python3中不赞成这样使用可能在未来会取消flask.ext.sqlalchemy这是个趋势 在Python3中建议使用from flask_

Kompany4的博客 1万+

【Flask】SQLAlchemy

本专栏介绍了SQLAlchemy库在flask上的orm操作

al6nlee的博客 7781

(三十四)Flask之SQLAlchemy

(三十四)Flask之SQLAlchemy

孤寒者的博客 1万+

STM32F407硬件SPI驱动ADS1220避坑指南:从寄存器读不到数据到采样值异常的完整解决流程

本文详细解析了STM32F407硬件SPI驱动ADS1220的常见问题与解决方案,包括SPI配置、寄存器读取异常、采样值优化等关键环节。通过CubeMX配置技巧和Keil调试经验,帮助开发者快速排查从通信失败到数据异常的各种问题,实现高精度数据采集系统的稳定运行。

weixin_26878995的博客 158

Flask-数据库-SQLAlchemy

SQLAlchemy是flask的扩展,是一个功能强大的OR映射器,支持多种数据库后台,可以将类的对象映射至数据库表。使用这个工具,可以创建数据库,创建表,并为数据库添加数据,进行查询操作等。

seanyang_的博客 4217

如何打开本地网络的防火墙端口(Windows版)解决ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。问题

ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。 最开始在遇到这个报错的时候十分不解,后来经过思考,有可能是服务器端口占用,或者并没有放行。因此搜查问题的关键是要先去排查问题。 在搜索栏输入控制面板 选择防火墙 选择开关 保证这些选项是开着的 选择高级设置 新建规则 创建协议端口 选择端口 允许连接 点击下一步 创建规则后点击下一步(后命名) 选择任意端口ALL即可 问题排查完毕!socket创建网络通信时,有读者

weixin_46900108的博客 9万+

Flask-SQLAlchemy

认识Flask-SQLAlchemy Flask-SQLAlchemy 是一个为 Flask 应用增加 SQLAlchemy 支持的扩展。它致力于简化在 Flask 中 SQLAlchemy 的使用。 SQLAlchemy 是目前python中最强大的 ORM框架, 功能全面, 使用简单。 ORM优缺点 优点 有语法提示, 省去自己拼写SQL,保证SQL语法的正确性 orm提供方言功能(dialect, 可以转换为多种数据库的语法), 减少学习成本 防止sql注入攻击 搭配数据迁移, 更新数据库方便

weixin_47906106的博客 3万+

智能驾驶小白必看:MEB低速紧急制动系统的工作原理与传感器配置详解

本文深入解析了MEB低速紧急制动系统的工作原理与传感器配置。该系统作为智能驾驶的关键安全冗余,专为应对停车场、拥堵路段等复杂低速场景设计。文章详细拆解了其如何通过超声波雷达、环视摄像头等传感器融合感知环境,并基于碰撞时间(TTC)等模型进行风险评估与分级制动,最终实现主动防碰撞,是智能驾驶技术实用化的重要体现。

c2d3e4f的博客 1132

Windows沙盒神器Sandboxie Plus保姆级教程:从安装到实战测试可疑软件

本文详细介绍了Windows沙盒神器Sandboxie Plus的安装、配置与实战应用,帮助用户安全测试可疑软件。从系统要求、安装步骤到核心功能如多沙盒管理、文件共享和快照恢复,全面解析了这款轻量级沙盒工具的优势与使用技巧,特别适合需要隔离运行未知程序的用户。

weixin_29323049的博客 1157

Flask 之 flask-SQLAlchemy 的使用

一、Flask-SQLAlchemy 配置与基本使用 1.1、配置键 Flask-SQLAlchemy 扩展能够识别的配置键的清单:SQLAlchemy 操作数据库的ORM组件 SQLALCHEMY_DATABASE_URI 用于连接数据的数据库。例如: sqlite:////tmp/test.db mysql://username:password@serve...

爱人BT的博客 1万+

AI影像组学在结直肠癌诊疗中的应用:从特征提取到临床决策

影像组学通过高通量计算从医学影像中提取定量特征,揭示肿瘤内部的微观生物学行为,这些特征反映了纹理异质性、形状不规则度等影像表型。其核心原理在于将图像数据转化为可分析的数字特征,结合机器学习算法进行模式识别,从而实现对疾病状态的精准预测。这一技术的价值在于能够无创、定量地评估肿瘤特性,为精准医疗提供关键支持。在临床实践中,AI驱动的影像组学模型广泛应用于结直肠癌的诊疗全链条,包括肿瘤良恶性鉴别、基因突变预测、治疗反应评估和预后分析等场景。通过整合影像组学特征与临床数据,可以构建预测模型,辅助医生进行更准确的诊

weixin_28295799的博客 409

Flask-SQLAlchemy 组件

字段类型Integer 普通整数,一般是32位SmallInteger 取值范围小的整数,一般是16位BigInteger 不限制精度的整数Float 浮点数Numeric 普通整数,一般是32位String 变长字符串Text 变长字符串,对较长或不限长度的字符串做了优化JSON JSON 数据Unicode 变长 Unicode 字符串UnicodeText 变长 Unicode 字符串,对较长或不限长度的字符串做了优化Boolean 布尔值。

longe20111104的博客 1947

【Zephyr驱动专题】01_深扒MPU6050陀螺仪寄存器

MPU6050作为最常用的6轴运动跟踪器件,其寄存器配置直接影响传感器性能和功能实现。本文将深入解析关键寄存器,并使用逻辑分析仪抓取信号进行分析。

zero的博客 1573

二十一、SAP-库存管理

业务逻辑、功能讲解、图文解析、章节总结

m0_72403327的博客 1811

Flask之SQLAlchemy

Flask之SQLAlchemy 简介 SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。 SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”。 SQLAlchemy首次发行于2006年2月,并迅速地在Python社区中最广泛使用的ORM工具之一,不亚于D...

weixin_45439324的博客 1410

2024美团秋招硬件开发笔试真题及答案解析

在 Linux 内核的网络设备驱动中,数据链路层的功能通常由网络协议栈的低层(如以太网驱动)实现,而不是作为网络设备驱动的一个独立层次。在 FreeRTOS 中,任务通知(Task Notifications)是一种轻量级的事件传递机制,用于在任务之间或任务与中断之间传递信号。小美正在开发一个简单的密码生成器,其中一个功能是将输入的字符串中的所有字母按字母顺序循环前移一位(即 'a' 变为 'z','B' 变为 'A',以此类推)。它包含了网络设备的各种参数和方法,用于管理网络设备的初始化、配置和操作。

XU157303764的博客 1678

Python SQLAlchemy 如何与 Flask 集成

SQLAlchemy 是 Python 中最流行的 ORM 库之一,它能够让开发者通过编写 Python 代码,而不是直接编写 SQL 语句来操作数据库。SQLAlchemy 的核心概念是通过模型类来表示数据库表,使用 Python 的对象来操作数据库中的记录。虽然 SQLAlchemy 本身可以独立于 Flask 使用,但为了与 Flask 更好地集成,社区提供了一个扩展库,这个扩展封装了 SQLAlchemy,简化了它在 Flask 中的配置和使用,使得 Flask 应用更容易与数据库交互。在。

chusheng1840的博客 1260

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

flask连接数据库——flask-SQLALchemy

SQLALchemy介绍: sqlalchemy是数据库的orm框架,让我们操作数据库的时候不要再用sql语句了,跟直接操作模型一样。 请求钩子: 在请求开始时,建立数据库连接; 在请求开始时,根据需求进行权限校验; 在请求结束时,指定数据的交互格式; @app.before_first_request #只有第一次请求之前调用,可以在此方法内部做一些初始化操作 @app.before_request #每次请求之前都会触发 #在每一次请求之前调用,这时候已经有请求了,可能在这个方法里面做请求的校验

weixin_46549605的博客 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

sqlalchemy与flask-sqlalchemy的区别

sqlalchemy与flask-sqlalchemy的区别

学习笔记,不喜勿喷! 416

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Flask-SQLAlchemy:在Flask应用中优雅地操作数据库

SQLAlchemy是一个强大的Python SQL工具包,它提供了一套完整的企业级持久化模式,用于将数据库操作抽象为Python代码。它允许我们使用面向对象的方式来操作数据库,而不必编写繁琐的SQL语句。SQLAlchemy支持多种数据库,包括MySQL、PostgreSQL、SQLite等,这使得我们在切换数据库时只需修改少量配置,而无需更改大量的代码。在Flask-SQLAlchemy中,我们使用Python类来定义数据库表的结构,这些类被称为模型类。

zhangkexin_z的博客 4869
上一篇: VMware打开虚拟机提示"此虚拟机可能已被拷贝或移动"的区别
下一篇: flask sqlalchemy 操作
freedompython
博客等级 码龄9年 7粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值