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

SVM-支持向量机学习(1):线性可分SVM的基本型

1. foreword先看的是李航老师的书第7章,比较传统按照以下三节展开: 线性可分SVM 线性SVM 非线性SVM SMO算法 李航老师讲东西向来不拖泥带水,但本节也几乎用了40页的篇幅,足见涉及内容之多。7月底硬着头皮啃了下来,边看边在笔记上摘抄标注,花了2天时间对SVM有了基本认识。一个月过去了,如今重新整理为博客,再看轻松许多,并不断对比西瓜书的内容,启望达到融会贯通。西瓜书此节明显节奏轻

鸟恋旧林的博客 8680

ndnSIM学习笔记(一)

在接下来的一段时间要用ndnSIM来做自己的仿真网络,需要系统的学习相关内容,以下为内容记录。1.安装      1.1核心依赖(必需的)             • python &gt;= 2.6             • libsqlite3             • libcrypto++             • pkg-config             • Boost lib...

gaonjzzz的博客 2985

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

群晖存储空间损毁不等于硬盘损坏:排查与修复实战

NAS存储系统中,物理硬盘、存储池与文件系统空间构成层级结构,任何一层出现异常都可能在管理界面汇总为“存储空间损毁”。事实上,异常断电、卷未正常挂载等软性问题也会触发这一红色告警,而存储池和硬盘SMART状态往往完全正常。理解这一机制后,用户无需急于格式化重建,通过事件日志审查、SSH确认挂载状态,再借助btrfs scrub等文件系统自愈工具,即可在数据不丢失的前提下恢复存储空间正常。该方案对家庭及小型办公环境中的群晖NAS尤其适用,特别是在供电不稳或硬盘休眠频繁的场景下,能有效规避误判风险。本文完整记录

weixin_30843121的博客 261

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

COMSOL网格划分技巧总结

在对马赫曾德尔型光学传感器进行模拟仿真时,在采用自动物理场自动控制网格-极细化的情况下透射谱曲线仍不理想,因此需要手动划分网格来对其进行更精细的剖分。 手动划分的基本原则是在作用边界,热点,曲边处做细致划分, 基底,包层等做粗略划分。对于光波导型的微纳结构,在仿真时一般需要用到创建边界层网格。 1.COMSOL所需要的网格数量 网格单元数越多,结果精细度越高,计算所需内存越多。在细化到一定程度后网格收敛,仿真结果提升不明显。 2.网格剖分类型 ...

qq_42453337的博客 4万+

基于STM32L4XX 、HAL库的ATD5984步进电机驱动器驱动程序应用设计

一、简介: ATD5984是一款内部集成了译码器的微特步进电机 驱动器,能使双极步进电机以全、半、1/4、/1/8、1/16 和1/32步进模式工作。步进模式由逻辑输入管脚MSx选 择。其输出驱动能力达到28V±1.6A。 译码器是ATD5984易于使用的关键,通过STEP管脚 输入一个脉冲就可以使电机完成一次步进,省去了相序 表,高频控制线及复杂的编程接口,使其更适于没有复 杂的微处理器或微处理器负担过重的场合。 在步进操作期间,ATD5984的内部电路可以自动

PP_Cottage的博客 406

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

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

凡凡不知所错 6064

【ESP32摄像头开发实例】-视频流接入Home Assistant

在这个项目中,我们将使用ESP32-CAM板构建一个IP监控摄像头。ESP32摄像头将托管一个视频流媒体网络服务器,您可以使用网络中的任何设备进行访问。

视觉与物联智能 790

Flask 之 flask-SQLAlchemy 的使用

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

爱人BT的博客 1万+

JavaSwing_1.1: FlowLayout(流式布局)

FlowLayout,流式布局管理器。按水平方向依次排列放置组件,排满一行,换下一行继续排列。

谢TS的博客 7万+

STM32实战开发(65):STM32摄像头图像采集开发教程

我们将会详细介绍如何使用STM32进行摄像头控制、图像数据采集以及如何将采集到的图像数据传输到其他设备进行处理。通过这篇博客,您将能够掌握STM32与摄像头模块的图像采集技术,应用于各种图像处理场景。为了确保STM32能够正确接收图像数据,我们需要配置STM32的GPIO引脚,并通过外部中断捕获这些信号。为了实现更高效的图像采集,可以通过DMA进行数据传输,将图像数据直接从GPIO引脚存储到内存中。通过DMA传输,我们可以将采集到的图像数据直接存储在内存中的一个缓冲区,然后进行后续的图像处理。

2201_76125393的博客 2537

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

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

kzl_knight的博客 1万+

STM32F407中文手册

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

Flask之SQLAlchemy

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

weixin_45439324的博客 1408

温度PID控制PLC程序

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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万+

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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、付费专栏及课程。

余额充值