更新 SqlAlchemy ORM 中的行

2023-11-23

我正在尝试从数据库获取一行,修改该行并再次保存它。
一切都使用 SqlAlchemy

My code

from sqlalchemy import Column, DateTime, Integer, String, Table, MetaData
from sqlalchemy.orm import mapper
from sqlalchemy import create_engine, orm

metadata = MetaData()

product = Table('product', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String(1024), nullable=False, unique=True),

)

class Product(object):
    def __init__(self, id, name):
        self.id = id
        self.name = name

mapper(Product, product)


db = create_engine('sqlite:////' + db_path)
sm = orm.sessionmaker(bind=db, autoflush=True, autocommit=True, expire_on_commit=True)
session = orm.scoped_session(sm)

result = session.execute("select * from product where id = :id", {'id': 1}, mapper=Product)
prod = result.fetchone() #there are many products in db so query is ok

prod.name = 'test' #<- here I got AttributeError: 'RowProxy' object has no attribute 'name'

session .add(prod)
session .flush()

不幸的是它不起作用,因为我正在尝试修改 RowProxy 对象。如何以 SqlAlchemy ORM 方式执行我想要的操作(加载、更改和保存(更新)行)?


我假设你的意图是使用对象关系API。 因此,要更新数据库中的行,您需要通过从表记录加载映射对象并更新对象的属性来完成此操作。

请参阅下面的代码示例。 请注意,我添加了用于创建新映射对象并在表中创建第一条记录的示例代码,并且末尾还有用于删除记录的注释掉的代码。

from sqlalchemy import Column, DateTime, Integer, String, Table, MetaData
from sqlalchemy.orm import mapper
from sqlalchemy import create_engine, orm

metadata = MetaData()

product = Table('product', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String(1024), nullable=False, unique=True),

)

class Product(object):
    def __init__(self, id, name):
        self.id = id
        self.name = name
    def __repr__(self):
        return "%s(%r,%r)" % (self.__class__.name,self.id,self.name)

mapper(Product, product)


db = create_engine('sqlite:////temp/test123.db')
metadata.create_all(db)

sm = orm.sessionmaker(bind=db, autoflush=True, autocommit=True, expire_on_commit=True)
session = orm.scoped_session(sm)

#create new Product record:
if session.query(Product).filter(Product.id==1).count()==0:

    new_prod = Product("1","Product1")
    print "Creating new product: %r" % new_prod
    session.add(new_prod)
    session.flush()
else:
    print "product with id 1 already exists: %r" % session.query(Product).filter(Product.id==1).one()

print "loading Product with id=1"
prod = session.query(Product).filter(Product.id==1).one()
print "current name: %s" % prod.name
prod.name = "new name"

print prod


prod.name = 'test'

session.add(prod)
session.flush()

print prod

#session.delete(prod)
#session.flush()

PS SQLAlchemy 还提供SQL 表达式 API允许直接使用表记录而无需创建映射对象。在我的实践中,我们在大多数应用程序中使用对象关系 API,有时当我们需要高效执行低级数据库操作(例如通过一个查询插入或更新数千条记录)时,我们会使用 SQL 表达式 API。

SQLAlchemy 文档的直接链接:

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

更新 SqlAlchemy ORM 中的行 的相关文章

  • Django:ImageField 需要文件路径还是实际的图像对象?

    Running Windows 7 Python 3 3 Django 1 6 我对如何将图像存储为 Django 数据库中表的一部分感到困惑 有一个领域叫做ImageField 这是Docs https docs djangoprojec
  • 从 RabbitMQ 迁移到 Amazon SQS [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们的初创公司目前正在使用RabbitMQ with Python Django 对于消息队列 现在我们计划转移到Amazon SQS其高可用性
  • 这段代码中list[:]的含义是什么? [复制]

    这个问题在这里已经有答案了 这段代码来自Python的文档 我有点困惑 words cat window defenestrate for w in words if len w gt 6 words insert 0 w print wo
  • 如何计算Numpy数组中特定范围内的值?

    我有一个 NumPy 值数组 我想计算有多少个值在特定范围内 例如 x25 我已阅读有关计数器的信息 但它似乎仅对特定值有效 对值范围无效 我已经搜索过 但没有找到任何关于我的具体问题的信息 如果有人能指出我正确的文档 我将不胜感激 谢谢
  • numba.prange 性能不佳

    我试图整理一个简单的例子来说明使用的好处numba prange对于我自己和一些同事来说 但我无法获得像样的加速 我编写了一个简单的一维扩散求解器 它本质上是在一个长数组上循环 组合元素i 1 i and i 1 并将结果写入element
  • 在 Python 中打开 Alteryx .yxdb 文件?

    有没有办法将 yxdb Alteryx 数据库文件 导入到 Pandas Python 中 而不使用 Alteryx 作为中间人 简短的回答是否定的 目前还不行 更长的答案 yxdb 支持的原始 C 是可以在 github 上找到 http
  • 使用非负约束进行优化

    考虑以下功能 import numpy as np import scipy optimize as opt import math Periodic indexation def pl list i return list i len l
  • PyPDF2 复制后返回空白 PDF

    def EncryptPDFFiles password directory pdfFiles success 0 Get all PDF files from a directory for folderName subFolders f
  • 使用 Pandas 解析时避免 Excel 的科学记数法舍入

    我有一个自动生成的 Excel 文件 其中偶尔包含非常大的数字 例如135061808695 在 Excel 文件中 当您单击单元格时 它会显示完整的数字135061808695然而 在视觉上 使用自动 常规 格式 数字显示为1 35063
  • scrapy蜘蛛如何将值返回给另一个蜘蛛

    我正在爬行的网站包含许多玩家 当我点击任何玩家时 我都可以进入他的页面 网站结构是这样的
  • 如何在Python中将字符串转换为包含一个元素的列表[重复]

    这个问题在这里已经有答案了 我有一个字符串 我想将其转换为其中只有一个元素的列表 a abc print list a output a b c Expected o p abc 正确的做法是什么 只需使用 a abc b a print
  • 使用 South 更改 Django 模型列默认值

    我在 Django 项目中使用 South 和 Postgresql DB 我想更改一个模型字段的默认值以供继续使用 我不需要以前的记录 刚刚新记录 我是否需要为此进行迁移 或者只是更改模型 旧场详细信息 background style
  • kombu.exceptions.EncodeError:用户不可 JSON 序列化

    我有 django 1 11 5 应用程序和 celery 4 1 0 我一直收到 kombu exceptions EncodeError
  • 为什么 `Pool.map()` 多处理中的内存消耗急剧增加?

    我正在对 pandas 数据帧进行多重处理 方法是将其拆分为多个数据帧 这些数据帧存储为列表 并且 使用Pool map 我将数据帧传递给定义的函数 我的输入文件约为 300 mb 因此小数据帧大约为 75 mb 但是 当多处理运行时 内存
  • 如何在seaborn displot上绘制正态曲线

    distplot 已被弃用 取而代之的是 displot 之前的函数可以选择绘制正态曲线 import seaborn as sns import matplotlib pyplot as plt from scipy import sta
  • 在 django 视图中执行阻塞请求

    在我的 django 应用程序的一个视图中 我需要执行相对较长的网络 IO 操作 问题是其他请求必须等待该请求完成 即使它们与该请求无关 我做了一些研究并偶然发现了 Celery 但据我了解 它用于执行独立于请求的后台任务 所以我不能使用任
  • 如何使用 google.oauth2 python 库?

    我试图对谷歌机器学习项目的安全预测端点进行简单的休息调用 但它找不到 google oauth2 模块 这是我的代码 import urllib2 from google oauth2 import service account Cons
  • Pandas - 过滤器和正则表达式搜索 DataFrame 的索引

    我有一个 DataFrame 其中列是 MultiIndex 索引是名称列表 即index Andrew Bob Calvin 我想创建一个函数来返回数据帧中使用名称 Bob 或以字母 A 开头或以小写字母开头的所有行 如何才能做到这一点
  • 从 Python 脚本创建可执行文件,同时获取较小的输出大小

    我的问题可能已经在某个地方得到了解答 但我仍然找不到直接的答案 我想从 python 代码创建一个独立的可执行文件 我已经尝试过很多解决方案 例如py2exe pyinstaller等等 但我的问题是输出文件大小很大 例如 在pyinsta
  • 通过 subprocess.communicate 在 python 脚本之间传输 pickled 对象输出

    我有两个 python 脚本 object generator py 它会腌制给定的对象并打印它 另一个脚本 object consumer py 通过 subprocess communicate 选择第一个脚本的输出 并尝试使用 pic

随机推荐

  • 角度错误:如果在表单标签内使用 ngModel,则必须设置 name 属性或 [duplicate]

    这个问题在这里已经有答案了 关于该错误还有很多类似的问题和答案 如果 ngModel 在表单标签内使用 则必须设置 name 属性 或者必须在 ngModelOptions 中将表单控件定义为 独立 解决方案是定义name消息中描述的属性
  • 不同移动设备中的加速度计和陀螺仪精度

    我想使用移动设备的传感器 加速度计 指南针 陀螺仪 这个问题已经在几个地方讨论过 例如 here and here 第一步是确定哪个平台最适合实施此类系统 主要的可能性是三星的 Galaxy Galaxy tab 或 iphone ipad
  • 开放式 Java SMB 服务器实现

    Java 中是否有 SMB CIFS 服务器的开放实现 我能找到的唯一实现是 Alfresco 但它不是开源的 一个相关的问题 假设没有这样的实现 我很惊讶没有一个库提供 SMB 的子集 例如用于简单的文件传输 我的直觉是 实现一个简单的服
  • C/C++ 严格别名、对象生命周期和现代编译器

    我对 C 严格别名规则及其可能的含义感到困惑 考虑以下代码 int main int32 t a 5 float f float a f 1 0f int32 t b a Probably not well defined float g
  • 通过自动更改所有函数和变量名称来模糊生产中的反应代码

    是否有任何库可以帮助模糊生产的反应构建 就像是 const MyComp gt const propa propb useMyfunc return to const xyz gt const yxz zyx zzz return 正确的选
  • IntelliJ(使用 gradle):即使已安装也找不到 Kotlin 插件

    我正在尝试使用 gradle 构建我的项目 但似乎找不到我的 kotlin 插件 即使我确实使用 从磁盘安装插件 添加了它 这是我收到的错误 无法解析配置 classpath 的所有依赖项 找不到 org jetbrains kotlin
  • 将常量值从 _layout.cshtml 传递给 Angular

    好的 我在 ASP Net SPA 项目的 Layout cshtml 中有一个常量变量 我将传递它们 以便 Angular 可以访问它们 我怎样才能做到这一点 例如 这是我试图传递的一个值 var lenderValues Html Ac
  • 如何使用phonegap在iOS应用程序中打开网页?

    我只想在我的 iOS PhoneGap 应用程序中只有一个视图 该视图将是一个网页 我怎样才能用特定的网址加载这个唯一的视图 我想你是通过 javascript 来做到这一点的 如果是的话 怎么做 我不是 html javascript 脚
  • ASP.Net 中的数据缓存

    我需要从一些参考数据中填充一些下拉框 即城市列表 国家列表等 我需要将其填写在各种网络表格中 我认为 我们应该在应用程序中缓存这些数据 这样我们就不会在每个表单上都访问数据库 我是缓存和 ASP Net 的新手 请建议我如何做到这一点 我总
  • 查找窗口失败 - 2 个 Galaxy Nexus 上同一应用程序的不同行为

    我有两部 Galaxy Nexus 手机 这些手机具有相同的固件版本 4 0 2 相同的内部版本号 相同的内核版本 当我使用 Eclipse 将同一个应用程序部署到两部手机时 我看到每部手机都有不同的行为 在一部手机上 一切都按预期进行 在
  • WCF InvalidOperationException:绑定实例已与侦听 URI 关联

    我是 WCF 的初学者 正在学习 Essential WCF 我在使用 ServiceContract NameSpace 和 Name 时遇到问题 当我运行代码时 我捕获了以下 InvalidOperationException 但我无法
  • jQuery的val()方法改变似乎并没有改变DOM

    Doing someId val newValue 不改变 DOM 我可以检索这个值 someId val 但是 DOM 中的元素仍然没有 value 属性 如何设置输入组件的值并更改 DOM 我在用着jQuery 1 5 1 val do
  • 在 R dplyr 中按计数扩展列

    我有一个因子列 我想将每个因素分散到一列中 然后通过每个 id 出现的该因素的计数来填补空白 假设我们有 car lt c a b b b c c a b b b c c type lt c good regular bad good re
  • 适合从扫描条形码 iPhone 应用程序获取产品详细信息的 api?

    正在开发示例条形码扫描仪应用程序 我使用 ZBar API 扫描产品中的条形码 它工作得很好 现在 希望获得扫描条形码的产品 我想从 api 获取产品的以下详细信息 Product Name Product Price Selling fe
  • 从 Spark 作业中调用 JDBC 到 impala/hive 并创建表

    我正在尝试在 scala 中编写一个 Spark 作业 该作业将打开与 Impala 的 jdbc 连接 并让我创建一个表并执行其他操作 我该怎么做呢 任何例子都会有很大的帮助 谢谢你 val JDBCDriver com cloudera
  • MS SQL Server 的“之间”是否包括范围边界?

    例如可以 SELECT foo FROM bar WHERE foo BETWEEN 5 AND 10 选择 5 和 10 还是将它们排除在范围之外 BETWEEN 运算符包含在内 来自在线书籍 如果 BETWEEN 的值返回 TRUE t
  • 从文件中读取和存储任意字节长度整数

    我试图通过在 numpy 中进行解析 数据积累来加速我去年编写的二进制文件解析器 numpy 定义自定义数据结构并将数据从二进制文件提取到其中的能力看起来就像我所需要的 除了这些文件中的某些字段是 非标准 长度 例如 6 字节 的无符号整数
  • 冷http请求和热http请求之间的区别?

    有人可以向我解释两件事吗 冷http请求和热http请求之间的区别 Angular 2 中的 http 请求是冷请求还是热请求 在 Angular 中 从 Http 服务发出的 http 请求是冷的 在这种情况下 冷 意味着只有有人订阅了从
  • 是否可以调试由没有 gdb 标志编译的可执行文件生成的核心文件?

    是否可以调试由没有 gdb 标志编译的可执行文件生成的核心文件 如果是 有任何指示或教程吗 是的你可以 但这并不容易 我给你举个例子 假设我有以下程序foo c main char 0 0 我将编译它并确保没有符号 cc foo c str
  • 更新 SqlAlchemy ORM 中的行

    我正在尝试从数据库获取一行 修改该行并再次保存它 一切都使用 SqlAlchemy My code from sqlalchemy import Column DateTime Integer String Table MetaData f