SQLAlchemy Session add() return value



使用 sqlalchemy 处理金字塔:

newjob_obj=Job(name=name,job_propery=job_property,sizeX=sizeX,
    sizeY=sizeY,quantity=quantity,timeline=timeline,
    description=description,remarks=remarks,
    client_id=client_id,created_by=created_by,status=status
)
new_job=session.add(newjob_obj)
print('Return newJob value %sn' % new_job)

在这里new_job打印为None。添加会话返回对象的函数。 请帮忙。

要在@mark答案的评论中回答您的问题 - 为了在提交后接收您的"插入的 ID":

session.add(newjob_obj)
session.commit()

您应该使用以下命令刷新插入的对象:

session.refresh(newjob_obj)
print newjob_obj.id

希望它有帮助..

这是预期的输出。 add()不返回值。文档:

在会话中放置一个对象。

其状态将在下次刷新时保存到数据库中 操作。

对 add() 的重复调用将被忽略。add() 的反义词是 清除()。

代码:

def add(self, instance, _warn=True):
    """Place an object in the ``Session``.
    Its state will be persisted to the database on the next flush
    operation.
    Repeated calls to ``add()`` will be ignored. The opposite of ``add()``
    is ``expunge()``.
    """
    if _warn and self._warn_on_events:
        self._flush_warning("Session.add()")
    try:
        state = attributes.instance_state(instance)
    except exc.NO_STATE:
        raise exc.UnmappedInstanceError(instance)
    self._save_or_update_state(state)

add 方法不返回值。当 Python 函数不返回值时,该函数的行为就像它返回 None 一样。如果要打印作业,请改为打印:

session.add(newjob_obj)
print('Return newJob value %sn' % newjob_obj)

您会看到,当您将对象add()会话时,SQLAlchemy 不会真正执行任何重要操作(例如对数据库运行查询)。它将做的只是跟踪对象存在的事实。然后当你做一个...

session.commit()

。您添加的所有对象都将插入到数据库中(其中包括对修改和删除的对象执行 UPDATE 和 DELETE)。

有关详细信息,请参阅文档中的使用会话章节。

对于 SQLite,提交后,可以直接从对象中获取插入的 id:

session.add(newjob_obj)
session.commit()
print('Return newJob id %dn' % newjob_obj.id)

最新更新