flask sqlalchemy

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

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数据库操作及Flask-SQLAlchemy Flask数据库操作-Flask-SQLAlchemy 阅读详情

相关推荐

Flask框架中SQLAlchemy的使用方法

config.py。

web13765607643的博客 883

(三十四)FlaskSQLAlchemy

(三十四)FlaskSQLAlchemy

孤寒者的博客 1万+

Flask】什么是Flask-SQLAlchemy

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

高岩 is me 852

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的博客 1975

FlaskSQLAlchemy

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

al6nlee的博客 7769

Flask-数据库-SQLAlchemy

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

seanyang_的博客 4209

Flask-SQLAlchemy

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

weixin_47906106的博客 3万+

Flaskflask-SQLAlchemy 的使用

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

爱人BT的博客 1万+

Flask-SQLAlchemy 组件

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

longe20111104的博客 1916

FlaskSQLAlchemy

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

weixin_45439324的博客 1402

Python SQLAlchemy 如何与 Flask 集成

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

chusheng1840的博客 1239

flask连接数据库——flask-SQLALchemy

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

weixin_46549605的博客 1万+

sqlalchemyflask-sqlalchemy的区别

sqlalchemyflask-sqlalchemy的区别

学习笔记,不喜勿喷! 411

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

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

zhangkexin_z的博客 4849

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值