【发布时间】:2015-03-13 18:40:19
【问题描述】:
我想复制(复制)一个由 SQLAlchemy 映射的对象。它应该只复制我创建的数据,而不是所有基础内容。它不应该复制主键或唯一值。
这在创建新数据条目时非常有用,这些新数据条目与上一个条目略有不同。因此用户不必再次输入所有数据。
一个重要的要求是当表中的列名(例如name)和python类中的成员名称(例如_name)不同时,这需要工作.
此(简化)代码适用于所有 declarative_base() 派生类,但仅当 col-name 和 member-name 相同时。
import sqlalchemy as sa
def DuplicateObject(oldObj):
mapper = sa.inspect(type(oldObj))
newObj = type(oldObj)()
for col in mapper.columns:
# no PrimaryKey not Unique
if not col.primary_key and not col.unique:
setattr(newObj, col.key, getattr(oldObj, col.key))
return newObj
col.key 是表中列的名称。当 python 类中的成员名称不同时,这将不起作用。我不知道 SQLAlchemy 如何将列名与成员名连接起来。 SQLA 如何知道这个连接?我该如何照顾它?
【问题讨论】:
标签: python sqlalchemy