在循环中使用 SQLAlchemy Session 对象提交数据时出现问题

2024-01-01

我在使用 SQLalchemy 时遇到数据库提交问题。这是我的场景,我有一个要添加到表中的记录列表。将记录添加到表中后,我需要获取插入的记录 Id 并再次插入到第二个表中。我正在单个会话下执行这些操作。下面给出了代码结构,因为我不允许给出代码

创建一个会话对象

循环要插入的记录列表:

 do the session.add(obj)

 session.commit()

 get obj.id

 do the session.add(obj2) # with obj2 having the id from the obj

 session.commit()

如果我们有多个记录,则只有最后一条记录数据被正确提交

任何人都可以帮我纠正这个问题。


你很有可能don't需要发出两次提交;使用 sqlalchemy 会话的主要原因之一是它了解对象如何相互关联,并将以正确插入数据并正确表示所需结构的方式对其插入进行排序。这主要通过relationship构造。这是一个简单的例子:

>>> from sqlalchemy import *
>>> from sqlalchemy.orm import *
>>> from sqlalchemy.ext.declarative import declarative_base
>>> Base = declarative_base()

>>> class A(Base):
...     __tablename__ = "a_table"
...     id = Column(Integer, primary_key=True)
... 
>>> class B(Base):
...     __tablename__ = "b_table"
...     id = Column(Integer, primary_key=True)
...     a_id = Column(Integer, ForeignKey(A.id))
...     a = relationship(A)
... 
>>> my_a = A()
>>> my_b = B()
>>> my_b.a = my_a
>>> 

最重要的部分是我们声明之间的关系A and B通过B.a。为了充分利用这一点,重要的是通过此关系属性来表达每个实例之间的关系,并让 sqlalchemy 负责设置a_id列本身。

>>> engine = create_engine("sqlite:///:memory:")
>>> Base.metadata.create_all(engine)
>>> engine.echo = True
>>> Session = sessionmaker(engine)
>>> 
>>> session = Session()
>>> session.add(my_a)
>>> session.add(my_b)
>>> 
>>> session.commit()

With echo=True,输出看起来有点像这样:

2011-09-16 17:19:22,367 INFO sqlalchemy.engine.base.Engine.0x...ed50 BEGIN (implicit)
2011-09-16 17:19:22,368 INFO sqlalchemy.engine.base.Engine.0x...ed50 INSERT INTO a_table DEFAULT VALUES
2011-09-16 17:19:22,368 INFO sqlalchemy.engine.base.Engine.0x...ed50 ()
2011-09-16 17:19:22,369 INFO sqlalchemy.engine.base.Engine.0x...ed50 INSERT INTO b_table (a_id) VALUES (?)
2011-09-16 17:19:22,369 INFO sqlalchemy.engine.base.Engine.0x...ed50 (1,)
2011-09-16 17:19:22,369 INFO sqlalchemy.engine.base.Engine.0x...ed50 COMMIT

请注意,my_a对象被插入,sqlalchemy 读取分配的主键并将其用于插入my_b.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在循环中使用 SQLAlchemy Session 对象提交数据时出现问题 的相关文章

  • Python 类型提示 Dict 语法错误 可变默认值是不允许的。使用“默认工厂”

    我不知道为什么解释器会抱怨这个类型的字典 对于这两个实例 我得到一个 不允许可变默认值 使用默认工厂 语法错误 我使用的是 python 3 7 3 from dataclasses import dataclass from typing
  • 让 VoiceChannel.members 和 Guild.members 返回完整列表的问题

    每当我尝试使用 VoiceChannel members 或 Guild members 时 它都不会提供适用成员的完整列表 我从文本命令的上下文中获取 VoiceChannel 和 Guild 如下所示 bot command name
  • Gunicorn 工作人员无论如何都会超时

    我正在尝试通过gunicorn运行一个简单的烧瓶应用程序 但是无论我做什么 我的工作人员都会超时 无论是否有针对应用程序的活动 工作人员在我设置任何内容后总是会超时timeout值到 是什么导致它们超时 当我发出请求时 请求成功通过 但工作
  • 在 Python 中将列表元素作为单独的项目返回

    Stackoverflow 的朋友们大家好 我有一个计算列表的函数 我想单独返回列表的每个元素 如下所示 接收此返回的函数旨在处理未定义数量的参数 def foo my list 1 2 3 4 return 1 2 3 4 列表中的元素数
  • NLTK 2.0分类器批量分类器方法

    当我运行此代码时 它会抛出一个错误 我认为这是由于 NLTK 3 0 中不存在batch classify 方法 我很好奇如何解决旧版本中的某些内容在新版本中消失的此类问题 def accuracy classifier gold resu
  • 如何从Python中的函数返回多个值? [复制]

    这个问题在这里已经有答案了 如何从Python中的函数返回多个变量 您可以用逗号分隔要返回的值 def get name you code return first name last name 逗号表示它是一个元组 因此您可以用括号将值括
  • 打印数字时添加千位分隔符[重复]

    这个问题在这里已经有答案了 我真的不知道这个问题的 名称 所以它可能是一个不正确的标题 但问题很简单 如果我有一个数字 例如 number 23543 second 68471243 我想要它使print 像这样 23 54368 471
  • Python 3:将字符串转换为变量[重复]

    这个问题在这里已经有答案了 我正在从 txt 文件读取文本 并且需要使用我读取的数据之一作为类实例的变量 class Sports def init self players 0 location name self players pla
  • 使用 python/numpy 重塑数组

    我想重塑以下数组 gt gt gt test array 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 为了得到 gt gt gt test2 array 11 12 21 22 13 14
  • 未知错误:Chrome 无法启动:异常退出

    当我使用 chromedriver 对 Selenium 运行测试时 出现此错误 selenium common exceptions WebDriverException Message unknown error Chrome fail
  • 嵌套作用域和 Lambda

    def funct x 4 action lambda n x n return action x funct print x 2 prints 16 我不太明白为什么2会自动分配给n n是返回的匿名函数的参数funct 完全等价的定义fu
  • 如何使用 Python 3 检查目录是否包含文件

    我到处寻找这个答案但找不到 我正在尝试编写一个脚本来搜索特定的子文件夹 然后检查它是否包含任何文件 如果包含 则写出该文件夹的路径 我已经弄清楚了子文件夹搜索部分 但检查文件却难倒了我 我发现了有关如何检查文件夹是否为空的多个建议 并且我尝
  • Protobuf 如何编码 oneof 消息结构

    对于这个 python 程序 在编码时运行 protobuf 编码会给出以下输出 0a 10 08 7f8a 0104 08 02 10 0392 0104 08 02 10 03 18 01 我不明白的是为什么8a后面有一个01 为什么9
  • 带有 LSTM 的 GridSearchCV/RandomizedSearchCV

    我一直在尝试通过 RandomizedSearchCV 调整 LSTM 的超参数 我的代码如下 X train X train reshape X train shape 0 1 X train shape 1 X test X test
  • python 中的“槽包装器”是什么?

    object dict 和其他地方的隐藏方法设置为这样的
  • 重新分配唯一值 - pandas DataFrame

    我在尝试着assign unique值在pandas df给特定的个人 For the df below Area and Place 会一起弥补unique不同的价值观jobs 这些值将分配给个人 总体目标是使用尽可能少的个人 诀窍在于这
  • 等待子进程使用 os.system

    我用了很多os system在 for 循环内调用创建后台进程 如何等待所有后台进程结束 os wait告诉我没有子进程 ps 我使用的是Solaris 这是我的代码 usr bin python import subprocess imp
  • 将索引与值交换的最快方法

    考虑pd Series s s pd Series list abcdefghij list ABCDEFGHIJ s A a B b C c D d E e F f G g H h I i J j dtype object 交换索引和值并
  • JSON:TypeError:Decimal('34.3')不是JSON可序列化的[重复]

    这个问题在这里已经有答案了 我正在运行一个 SQL 查询 它返回一个小数列表 当我尝试将其转换为 JSON 时 出现类型错误 查询 res db execute SELECT CAST SUM r SalesVolume 1000 0 AS
  • NLTK:查找单词大小为 2k 的上下文

    我有一个语料库 我有一个词 对于语料库中该单词的每次出现 我想获取一个包含该单词之前的 k 个单词和该单词之后的 k 个单词的列表 我在算法上做得很好 见下文 但我想知道 NLTK 是否提供了一些我错过的功能来满足我的需求 def size

随机推荐

  • 从 unity 发送请求时 file_get_contents 返回 null

    我正在 PHP 中处理 post 请求数据 header Access Control Allow Origin header Content Type application json charset UTF 8 header Acces
  • 在 JavaScript 中扩展

    有人可以帮我理解这段代码吗 对我来说似乎太复杂了 var extends this extends function d b function this constructor d prototype b prototype d proto
  • 红黑树的应用

    红黑 RB 树有哪些应用 有没有什么应用程序只能使用RB Tree而不能使用其他数据结构 A 红黑树 http en wikipedia org wiki Red black tree是一个特定的实现自平衡二叉搜索树 http en wik
  • DataAdapter.Update() 性能

    我有一个相对简单的例程 它查看媒体文件的数据库条目 计算宽度 高度和文件大小 并将它们写回到数据库中 数据库是 SQLite 使用 System Data SQLite 库 处理约 4000 行 我将所有行加载到 ADO 表中 使用新值更新
  • GitLab sidekiq 测试失败

    我按照此处的说明进行操作 https github com gitlabhq gitlabhq blob 4 1 stable doc install databases md https github com gitlabhq gitla
  • 维护包含其他克隆 git 存储库的 git 存储库

    我正在使用一个网站Sharelatex github https github com sharelatex sharelatex但它包含用于构建主项目的其他存储库 我克隆了主存储库并做了grunt install用于下载这些存储库 但问题
  • Shiny R 反应值内存泄漏

    我试图理解为什么骑自行车时使用闪亮的reactivevalues导致它使用更多内存 上下文是一个用户界面 可以选择自动执行给定的策略 下面的例子基于圣彼得堡悖论 我意识到将整个自动化过程放在单独的函数文件中可能是更好的做法 但我想了解为什么
  • 使用 ExtJS 实现富互联网应用:我应该选择哪个方向?

    我需要一些帮助来选择正确的 RIA 方式 我确实想使用 javascript 小部件库 可能是 ExtJS 但我不确定我是否应该尝试通过 Javascript 进行编程ExtGWT http extjs com products gxt 或
  • PHP 简单 HTML DOM 解析器消亡

    我使用简单的 HTML DOM 解析器来屏幕抓取带有一堆子页面的页面 由于某种原因 它可以很好地解析前 40 个子页面 但当涉及到第 41 个子页面时 它会毫无错误地终止 我已经做了这个测试页 http snuzzer dk pub shd
  • 如何将引发异常的函数转换为返回 Either 的函数?

    假设我有一些引发异常的函数 我正在包装它们以返回Either Throwable
  • 是否有用于利用对称性的对称矩阵乘法的 BLAS 或 LAPACK 子例程?

    我希望有人能帮助我 我正在寻找专门用于两个大且相同的对称矩阵的矩阵乘法的 BLAS 或 LAPACK 子例程 到目前为止 我已经测试了 Dyrk 和 dgemm 例程 两者都非常慢 我想知道是否有特定于对称矩阵平方的例程 任何帮助将不胜感激
  • Microsoft PDC (2009) 中的哪些新闻/谈话将对您作为程序员产生最大影响?

    我已将其设为社区维基 作为一名主要使用 NET的程序员 微软开发平台的功能方向对我的功能工作有很大的影响 最近的 PDC 让我们深入了解了 Microsoft 的开发平台的发展方向 那么您认为 PDC 的哪些内容会对you作为一名程序员 您
  • DataFrame 单元格换行符

    问题很简单 如何防止打印数据框单元格中的换行Jupyter笔记本 不在终端中 我在这里没有看到任何答案 比如使用的答案pd get option display width pd get option display max colwidt
  • gwtbootstrap 始终适用于所有元素

    我想用GWT 引导程序 http gwtbootstrap github io 对于我的应用程序 所以我将 jar 添加到类路径中并在 app gwt xml 中继承它 并且到目前为止它正在工作 我是 Bootstrap 的新手 到目前为止
  • pgAdmin3 连接问题

    我最近正在使用 VMware Workstation 8 设置并运行 Windows 2008 r2 服务器 我正在运行带有 Postgresql 9 1 的 Centos 6 2 虚拟 Linux 盒子 本地一切似乎都正常 我可以通过桥接
  • 无法在 Visual Studio 上加载 ClassDiagram.cd。 “不支持 URI 格式”

    当我尝试打开我的类图时asp net 网络表单项目我收到以下错误 类图 cd 文件已生成 但我无法打开它们 I do have some classes that use the URI class but i don t really t
  • 将 freq 字符串转换为 pandas 中的 DateOffset

    在 pandas 文档中 当谈到诸如 W 或 W SUN 之类的频率字符串时 可以阅读 在幕后 这些频率字符串正在被转换为 pandas DateOffset 的实例 那么 如何在给定字符串的情况下获取 DateOffset 的实例 最终想
  • 如何使用自定义ip地址浏览网页c#/.net

    我正在尝试使用自定义 用户提供的 IP 地址浏览网页 但它不起作用 webBrowser1 成功加载网页 但它没有使用自定义 IP 地址 而是使用真实 IP 地址加载页面 请告诉我如何成功地完成这项工作 这是我的代码 private voi
  • 如何将图像放置在链接内?

    我正在尝试一些非常简单的东西 在链接内我希望有文本和图像 link to NVidia Graphics inventory url class lato do image tag list highlighter png 我希望输出是这样
  • 在循环中使用 SQLAlchemy Session 对象提交数据时出现问题

    我在使用 SQLalchemy 时遇到数据库提交问题 这是我的场景 我有一个要添加到表中的记录列表 将记录添加到表中后 我需要获取插入的记录 Id 并再次插入到第二个表中 我正在单个会话下执行这些操作 下面给出了代码结构 因为我不允许给出代