使用 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)