首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQLAlchemy:修改分离对象

SQLAlchemy:修改分离对象
EN

Stack Overflow用户
提问于 2013-02-01 06:19:33
回答 2查看 10.3K关注 0票数 23

我想使用orm在SQLAlchemy中复制一个模型实例(行)。我的第一个想法是这样做:

代码语言:javascript
复制
i = session.query(Model)
session.expunge(i)

old_id = i.id
i.id = None
session.add(i)
session.flush()
print i.id #New ID

然而,显然分离的对象仍然“记住”它拥有的id,即使我在分离时将id设置为None。因此,session.flush()尝试执行将主键更改为null的更新。

这是预期的行为吗?我如何移除这个属性的‘内存’,并在重新将分离的对象添加到会话中时将其视为新对象?一般来说,如何克隆一个SQLAlchemy模型实例?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-02 08:04:24

使用make_transient()帮助器函数可以使用此案例:

代码语言:javascript
复制
inst = session.query(Model).first()
session.expunge(inst)

make_transient(inst)
inst.id = None
session.add(inst)
session.flush()
print inst.id #New ID
票数 41
EN

Stack Overflow用户

发布于 2015-03-01 11:00:09

代码语言:javascript
复制
def duplicate(self):
    arguments = dict()
    for name, column in self.__mapper__.columns.items():
        if not (column.primary_key or column.unique):
            arguments[name] = getattr(self, name)
    return self.__class__(**arguments)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14636192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档