a1.sqlalchemy-研究

SQLAlchemy使用教程 ORM(ObjectRelationalMapping,对象关系映射)可以绕过SQL语句,把数据库的table(表)映射为编程语言的class(类),可以直接使用编程语言的对象模型操作数据库,而不使用SQL语句。ORM把表映射成类,把行作为实例,把字段作为属性,在执行对象操作时最终会把对象的操作专函为数据库原生语句。... 阅读详情

Sqlalchemy And Flask-Sqlalchemy

使用sqlalchemy时,先搞明白:

  • sqlalchemy和flask-sqlalchemy不相等。flask-sqlalchemy是一个flask的扩展,简化了在flask中使用sqlalchemy的操作。
  • sqlalchemy提供了高层orm,也提供了使用数据库原生sql的底层功能。

sqlalchemy使用

  • db.create_all()可以用来创建表,若表已存在,那么其不会进行创建或者更新。但是在修改模型后要把改动应用到现有的数据库中,粗暴的方式为先删除表,再重新创建。db.drop_all()/db.create_all()因此,可以用Django的那套orm来创建表,sqlalchemy只用来操作表内的数据。

事务操作(数据库会话也成为事务)

  • 通过数据库会话管理对数据库所做的改动。sqlalchemy中用db.session标识
    • db.session.add() 添加到会话
    • db.session.flush()刷新会话,这里可以拿到对象的id,对应的数据已到数据库缓存中,只是还未提交。
    • db.session.commit() 提交会话
  • 数据库会话能保证数据库的一致性。
  • 提交操作使用原子方式把会话中的对象全部写入数据库。如果写入的过程发生了错误,整个会话都会失效。(只要把相关的改动放在会话中提交,就能避免因部分更新导致的数据库的不一致,就能完成事务的操作)
  • db.session.rollback() 数据库会话的回滚。调用后,添加到数据库会话的所有对象都会还原到他们在数据库时的状态。

db.session.flush详解

通过query可以拿到数据,执行mysql语句同理也可以,但是这个只限于在当前连接的缓存内体现,数据还未被持久化到数据库文件。别的账户连接,是看不到这个数据的。也就是数据库没有这条数据,但是在缓存内是有这个数据的。

# TODO 试验db.session.flush()
@ns.route('/test')
class test(Resource):
    def get(self):
        # 最后一个id是122
        count_obj = dbm.TaskCount()
        count_obj.date = '1111-11-11'
        count_obj.total_count = 11
        count_obj.complete_count = 11
        count_obj.task_template_id = 646
        db.session.add(count_obj)
        db.session.flush()
        logger.info(">>>>>>>>> flush_id >>>>>%s"%count_obj.id)
        query_obj = dbm.TaskCount.query.filter_by(id=count_obj.id).first()
        if query_obj:
            logger.info(".....%s"%query_obj.id)
            logger.info('......data..... %s'%query_obj.date)
        temp_id = count_obj.id
        query2 = db.session.execute("select * from patrol_inspect_task_count where id=:id", {'id': temp_id}).fetchall()
        logger.info('******** query_2 ********* %s'%query2)
        return 'yes!'


# 得到的结果(基于mysql的缓存,预提交机制autocommit机制的设置)

# flush可以拿到id
>>>>>>>>> flush_id >>>>>125

.....125
......data..... 1111-11-11

# 直接执行sql语句拿到的结果
******** query_2 ********* [(125, u'1111-11-11', 11, 11, 646)]

sqlalchemy注意点

1. filter_by(name='haha').count()的坑

# 执行上述的count方式:
temp_count = dbm.PersonnelBlacklist.query.filter(text(sql_text)).params(**sql_params).count()

# sqlalchemy执行的sql为:
 """转化sql含义为先搜索出所有sql对象,在统计所有数据对象的数量,当数据量大的时候,这样会严重影响速度。"""
SELECT count(*) AS count_1 
FROM (SELECT * FROM account_personnel_blacklist) AS anon_1


# 优化方式:
temp_count = db.session.query(func.count(dbm.PersonnelBlacklist.id)).\
            filter(text(sql_text)).params(**sql_params).first()[0]
# 这样转化过来的sql为:
# 直接执行搜索数量,数据量大的时候,提升回很明显
SELECT count(account_personnel_blacklist.id) AS count_1 
FROM account_personnel_blacklist  LIMIT %(param_1)s

2.pagination_obj.items和pagination_obj.total的弊端

  • 得到pagination的分页对象后<flask_sqlalchemy.Pagination object at 0x7fd7046df9d0>,内部有items用于获取所有对象,total获取总的数量(筛选条件下,不做分页)

  • 虽然得到的是一个对象,但想获取到数据和总数量,这里会隐式的执行两条sql(一条用于查数据,一条用于查总数量)

  • 如下的两条(与上边count的坑一致):

    • select * from account
    • select count(*) from account (select * from account) as temp_data
  • 但但是上边的操作,对coder比较友好,一行代码即可搞定。若要优化好可以将获取数据,获取总数量(select count(id) from account)分成两步精简的sql进行执行

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

相关推荐

python sqlalchemy 连接池_深入研究sqlalchemy连接池

简介:相对于最新的MySQL5.6,MariaDB在性能、功能、管理、NoSQL扩展方面包含了更丰富的特性。比如微秒的支持、线程池、子查询优化、组提交、进度报告等。本文就主要探索MariaDB当中连接池的一些特性,配置。来配合我们的sqlalchemy。一:起因本来是不会写这个东西的,但是,写好了python--flask程序,使用sqlalchemy+mariadb,部署以后总是出问题,500错...

weixin_39669147的博客 1842

如何在sqlalChemy.Engine.Connection中设置autoCommit=1

在SQLAlchemy中,`autoCommit`属性并不直接存在于`Connection`对象上,而是通过创建`create_engine()`时设置的参数来控制的。如果你想在连接时自动提交事务,你需要将`connect_args`中的`autocommit`参数设置为True。在这个示例中,我们创建了一个数据库引擎,并设置`autoCommit`为True。如果你的应用需要大量的事务或者需要在事务中使用大量资源,那么你可能需要考虑手动管理事务。# 在这里执行SQL查询和插入操作,它们将会自动提交。

762

Flask框架中SQLAlchemy的使用方法

config.py。

web13765607643的博客 893

python-sqlalchemy中设置autocommit

这个只需要在连接数据库的时候加上即可: SQLALCHEMY_DATABASE_URI = ('mysql+pymysql://username:passwrod@ip:prot/database?charset=utf8&autocommit=true')

追心 9589

好书分享:Control and Estimation with MATLAB(5th Edition)pdf

基于MATLAB的控制与估计》(第5版)由八章组成,包括控制算法和设计。主要内容包括状态估计和数据平滑、RLS和卡尔曼滤波器状态估计、控制系统设计、自适应控制和PID。书中的概念已经使用MATLAB和Simulink实现。提供了可下载的MATLAB和Simulink文件。适合人群:大学生、研究生、控制类工程研究人员。需要电子版pdf,回复索取。

jixianhu的博客 1510

AT32F403A ADC采集实战:如何用V2库精准读取可变电阻电压(附完整代码)

本文详细介绍了基于AT32F403A微控制器和V2库实现高精度ADC采集的工程化方法。内容涵盖从基础的单通道轮询配置到多通道扫描与DMA传输的进阶应用,并重点分享了提升ADC采集精度的关键技巧,包括采样时间优化、软件滤波算法以及硬件布局考量,提供了完整的实战代码,帮助开发者解决数据跳动、稳定性等常见问题。

weixin_29189003的博客 92

python-sqlalchemy中设置autocommit【没有设置自动提交常见错误】

直接在URI中的配置方法 SQLALCHEMY_DATABASE_URI = ('mysql+mysqlconnector://username:passwrod@ip:prot/database?charset=utf8&autocommit=true') 错误类型一 (mysql.connector.errors.OperationalError) MySQL C...

weixin_43343144的博客 2820

芯片散热技术突破:多尺度结构与VC集成方案解析

在半导体技术快速发展的背景下,芯片散热成为制约性能提升的关键瓶颈。传统散热技术如风冷和水冷已接近物理极限,而两相浸没式液冷技术凭借其超高传热系数成为新的解决方案。通过多尺度表面结构设计与真空腔均热板(Vapor Chamber)的集成创新,可以显著提升沸腾性能,降低沸腾起始温差(ONB)并突破临界热流密度(CHF)限制。这种技术在数据中心、高性能计算(HPC)和边缘计算等高热流密度场景中具有重要应用价值,能有效提升能效比(PUE)并降低能耗。

weixin_36288992的博客 153

flask sqlalchemy数据库查询操作(批量增删改)

封装sql提交和回滚 class SQLAlchemy(_SQLAlchemy): @contextmanager def auto_commit(self): try: yield self.session.commit() except Exception as e: self.session.rollback() raise ServerError() 更新

九月镇灵将的博客 2501

Java农产品质量溯源大数据管理系统源码

产品追溯基于“一物一码”从工厂生产环节至销售阶段,赋予产品唯一的数码,并关联产品名称、批号、生产时间等信息,建立包装关联关系,为后期产品的追溯、营销搭建信息基础。 农产品溯源,从原材料收购、生产、加工质检到包装运输、终端门店销售等环节追溯,可以保证产品质量,监管部门和消费者都可以查询产品信息。对生产进行层层把关、一旦发现问题、立即进行处理、提升产品质量。

xingchen优快云的博客 1805

备战2025数学建模国赛(算法46):多目标优化

本篇博客将深入浅出地介绍多目标优化的核心概念、主流算法,并重点结合一个数学建模竞赛的经典案例,提供完整的Python代码实现,助你在未来的竞赛中游刃有余。它通过寻找帕累托最优解集,完美地诠释了“鱼与熊掌不可兼得”的权衡思想,为最终决策提供科学依据。这些问题都包含多个相互冲突的目标,传统的单目标优化方法(如梯度下降、单纯形法)对此无能为力,因为它们无法同时优化多个目标。在数学建模竞赛中,我们面临的绝大多数问题都不是单一的“最好”,而是充满权衡与妥协的“最优”。记住,成功的建模不仅在于解出问题,更在于清晰地。

YOLO 285

SQLAlchemy的使用(三)--调用stored procedure并且整合结果集

连接好数据库后,可以直接调用stored procedure文件,这里用到了cursor: def exec_spGetRevisionInfo(): connection = db.engine.raw_connection() cursor = connection.cursor() cursor.execute('exec dbo.spGetRevisionInfo'...

凡凡不知所错 6064

【Claude Code 源码解析教程】第4章:QueryEngine 查询引擎

本章深入解析 Claude Code 的核心引擎——QueryEngine,它是整个对话系统的"心脏",负责管理会话状态、消息处理流程和多轮对话支持。

rengang66的博客 269

Flask 之 flask-SQLAlchemy 的使用

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

爱人BT的博客 1万+

【用unity实现100个游戏之16】Unity程序化生成随机2D地牢游戏1(附项目源码)

关于使用TileMap生成随机2D地图,其实之前已经有做过类似的,感兴趣可以看看 但是随着学习深入,发现之前做的比较粗糙和不够全面,最近又在外网看到

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2215

精密加工零件自动报价智能体设计与实现

摘要 本文设计并实现了一个精密加工零件自动报价智能体系统。该系统通过计算机视觉和几何分析技术,自动读取3D图纸(STEP/STL格式),提取影响加工成本的几何特征,实现精准报价。系统采用模块化设计,包含3D模型解析、特征提取、成本计算和报价生成四个核心模块。关键技术包括:使用PythonOCC处理STEP文件,Trimesh处理STL网格;实现体积、表面积、包围盒等基础几何量计算;开发特征提取算法识别复杂曲面、深孔等加工难点;基于规则库进行可加工性评分和成本估算。相比传统人工报价方式,该系统能显著提高报价效

AI的内部世界的博客 112

【SQLAlchemy】第6节:模型类1对1

【SQLAlchemy】第6节:模型类1对11 思路与实现2 总结 1 思路与实现 1对1的应用场景并不多,介绍一下我熟悉的两种业务场景: 一张表中以少部分字段并不常用,而且这些不常用的字段占用的存储空间还很大,这时候就可以把1个表一分为二,1对1关联 一张表中有些数据十分敏感,可以把敏感的数据分离出来,1对1连接 以下代码以优快云学院的某个业务为例: 注册优快云账号,相当于添加了一个U...

kzl_knight的博客 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Flask之SQLAlchemy

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

weixin_45439324的博客 1408

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Flask SQLAlchemy config

Flask-SQLAlchemy-config 一、配置键 SQLALCHEMY_DATABASE_URI# 连接数据的数据库 SQLALCHEMY_DATABASE_URI='sqlite:////tmp/test.db' SQLALCHEMY_DATABASE_URI='mysql://username:password@server/db' #SQLAlchemy 把一个引擎的源表示为一个连同设定引擎选项的可选字符串参数的 URI。URI 的形式是: dialect+driver://userna

钟健的博客 7万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Flask-SQLAlchemy 组件

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

longe20111104的博客 1947

Flask-SQLAlchemy的使用【一】

在我们使用时,需要通过构造函数实例化一个db对象,之后对数据库的操作都基于这个db对象,可以理解为这个db对象就是主机与数据库的“一条链接定义模型之后,我们可以很方便的创建模型对象,之后再对数据库进行操作时,便可使用模型对象操作,大大简化了书写提高了效率除此之外,使用模型我们还可以很方便的创建一张或多张表创建一个类,该类必须继承db对象的Model模型, 之后可以编辑这个类,“”属性用来标识该模型的名字(创建表时的名字),如果没有指定将有随机指定我们使用方法来创建表中的一列#设置表名一些参数说明。

zheshiyangyang的博客 1102

sqlalchemy查询语句总结

sqlalchemy查询语句总结 查询 1.FLASK-SQLALCHEMY - 查询 1.基于 db.session 进行查询 1.db.session.query() 该函数会返回一个Query对象,类型为 BaseQuery,包含了指定实体类对应的表中所有的数据 该函数也可以接受多个参数,参数表示的是要查询哪个实体 2.查询执行函数 目的:在查询的基础上得到最终想要的结果 语法:db.session.query(...).查询执行函数() 也可以直接使用定义的类来查询: 例:Us

王轩的博客 8536

Flask sqlalchemy 映射关联已存在的表

1、安装库 pip install sqlalchemy pip install mysql-connector-python 驱动包如果没有安装成功会报错,无法链接! 2、示例代码 from sqlalchemy import create_engine,Table,MetaData from sqlalchemy.orm import Session metadata = MetaData() engine = create_engine( 'mysql+mysqlconnector://r

Test_Box 2940

Flask-SQLAlchemy的使用(详解)

SQLAlchemy映射构建 SQLAlchemy是Python编程语言下的一款开源软禁啊,提供了SQL工具包和ORM工具,使用MIT许可证发行。 SQLAlchemy采用简单的Python语言,为了搞笑和高性能数据库访问设计,实现了完整的企业级持久模型。 SQLAlchemy首次发行于2006年2月,并迅速成为Python社区中最广泛应用的ORM工具直以,不亚于Django的ORM框架 Flas...

王涛涛的博客 3579

【SQLAlchemy】第4节:模型类1对多

【SQLAlchemy】第2节:模型类的定义与创建1 思路与实现2 涉及的关键字2.1 需要导的包2.2 关键字解释代码 1 思路与实现 定义两个表,用户表user,论坛帖子forum 1对多关系为user可以发送多个forum,而每个forum必须有且只有一个发送者user talk is cheap,show me the code!!!!!! from sqlalchemy import...

kzl_knight的博客 1万+

sqlalchemy mysql_SQLAlchemy简明教程

原文可见:SQLAlchemy简明教程 - Jiajun的编程随想SQLAlchemy是Python中常用的一个ORM,SQLAlchemy分成三部分:ORM,就是我们用类来表示数据库schema的那部分SQLAlchemy Core,就是一些基础的操作,例如 update, insert 等等,也可以直接使用这部分来进行操作,但是它们写起来没有ORM那么自然DBAPI,这部分就是数据库驱动它们的...

weixin_39625162的博客 485
上一篇: 数据库加锁,乐观锁、悲观锁
下一篇: a2.sqlalchemy-操作
AggressionStorm
博客等级 码龄9年 6粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值