在单次提交中使用 sqlalchemy 添加和更新
Add and update with sqlalchemy in single commit
我是 sqlalchemy 的新手。我想在单个事务中为下面的相同 model.code 片段添加和更新。应用程序抛出错误 'Session' object has no attribute 'update'
current_date = datetime.datetime.now()
try:
session = Session()
user = UserProvision()
user.username = admin["username"]
user.password= admin["password"]
user.client_id= admin["client_id"]
user.fname= admin["fname"]
user.lname= admin['lname']
user.phone= admin['phone']
session.add(user)
session.flush()
user_id = user.user_id
user.name = admin["fname"]+" "+admin["lname"]
user.setCreated_by=user_id
user.setModified_by=user_id
user.setCreated_name=admin["fname"]+" "+admin["lname"]
user.setModified_name=admin["fname"]+" "+admin["lname"]
user.setLast_reset_date=current_date
user.setLast_reset_by = current_date
session.update(user)
session.flush()
session.commit()
except Exception as ex:
print ex.__str__()
finally:
session.close()
当您将模型对象添加到会话中时,它的状态已经被跟踪以进行更改。无需明确将其标记为已更新,正如您所指出的,没有这样的方法 Session.update()
。只需删除该行,您的代码就会按预期工作。
通过模型 class 属性的 instrumentation 实现跟踪:
The SQLAlchemy mapping process, among other things, adds database-enabled descriptors to a mapped class which each represent a particular database column or relationship to a related class.
换句话说,当您的模型 class 构建时,Column
属性将替换为 InstrumentedAttribute
描述符实例,这些实例会跟踪值的变化。
请注意,在 Session.commit()
:
之前不需要手动刷新
Flush pending changes and commit the current transaction.
我是 sqlalchemy 的新手。我想在单个事务中为下面的相同 model.code 片段添加和更新。应用程序抛出错误 'Session' object has no attribute 'update'
current_date = datetime.datetime.now()
try:
session = Session()
user = UserProvision()
user.username = admin["username"]
user.password= admin["password"]
user.client_id= admin["client_id"]
user.fname= admin["fname"]
user.lname= admin['lname']
user.phone= admin['phone']
session.add(user)
session.flush()
user_id = user.user_id
user.name = admin["fname"]+" "+admin["lname"]
user.setCreated_by=user_id
user.setModified_by=user_id
user.setCreated_name=admin["fname"]+" "+admin["lname"]
user.setModified_name=admin["fname"]+" "+admin["lname"]
user.setLast_reset_date=current_date
user.setLast_reset_by = current_date
session.update(user)
session.flush()
session.commit()
except Exception as ex:
print ex.__str__()
finally:
session.close()
当您将模型对象添加到会话中时,它的状态已经被跟踪以进行更改。无需明确将其标记为已更新,正如您所指出的,没有这样的方法 Session.update()
。只需删除该行,您的代码就会按预期工作。
通过模型 class 属性的 instrumentation 实现跟踪:
The SQLAlchemy mapping process, among other things, adds database-enabled descriptors to a mapped class which each represent a particular database column or relationship to a related class.
换句话说,当您的模型 class 构建时,Column
属性将替换为 InstrumentedAttribute
描述符实例,这些实例会跟踪值的变化。
请注意,在 Session.commit()
:
Flush pending changes and commit the current transaction.