栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

SQLAlchemy:防止自动关闭

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

SQLAlchemy:防止自动关闭

第一个答案-关于“防止自动关闭”。

SQLAlchemy使用insert运行DBAPI
execute()或executemany(),并且不执行任何选择查询。因此,您遇到的异常是预期的行为。执行插入查询后返回的ResultProxy对象包装了不允许对其执行的DB-
API游标

.fetchall()
。一旦
.fetchall()
失败,ResultProxy将向用户返回您看到的异常。

在插入/更新/删除操作之后,您可以获得的唯一信息是受影响的行数或自动递增后的主键值(取决于数据库和数据库驱动程序)。

如果您的目标是接收此类信息,请考虑检查ResultProxy方法和属性,例如:

  • .inserted_primary_key
  • .last_inserted_pa​​rams()
  • .lastrowid
  • 等等

第二个答案-关于“如何进行批量插入/更新并获得结果行”。

使用DBAPI进行单次插入查询时,无法加载已插入的行。您用于批量插入/更新的SQLAlchemy SQL expression
API也未提供此类功能。SQLAlchemy运行DBAPI
executemany()调用,并依赖于驱动程序的实现。有关详细信息,请参见本节文档。

解决方案是设计表的方式,使每条记录都具有用于标识记录的自然键(以独特方式标识记录的列值的组合)。因此,插入/更新/选择查询将能够针对一条记录。完成后,可以先进行批量插入/更新,然后再通过自然键进行选择查询。因此,您不需要知道自动递增的主键值。

另一种选择:可能是您可以使用SQLAlchemy对象关系API创建对象-然后,SQLAlchemy可能会尝试为您执行executemany来优化插入。使用Oracle
DB时对我有用。开箱即用的更新不会有任何优化。检查此SO问题以获取有效的批量更新建议



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/611629.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号