gpt4 book ai didi

python - 如何使 session.expunge_all() 工作以从 SQLAlchemy 中的 session 中分离所有实例?

转载 作者:行者123 更新时间:2023-11-29 00:21:18 81 4
gpt4 key购买 nike

我创建了一个 SQLAlchemy session 作为:

from sqlalchemy.orm import sessionmaker
Session = sessionmaker()
Session.configure(bind=engine)
session = Session()
session.autoflush = False

我对多个 POST 请求使用同一个 session 对象。当我第一次向这个 session 对象添加一个对象并执行 session.commit() 时,该对象通过 INSERT 查询插入到 MySQL 中。但是下次当我再次使用与 session.add() 相同的 session 时,旧对象会使用 UPDATE 查询进行更新。我正在 commit() 将我的第一个 INSERT 和分离实例作为 session.expunge_all() 但它仍然执行相同的操作。

    def new(self, **kwargs):
self.firstname = kwargs['firstname']
self.lastname = kwargs['lastname']
session.add(self)
session.commit()
session.expunge_all()

这是否意味着我每次使用它来更新数据库时都必须创建一个新的 session 对象?或者在从 session 中分离实例的代码中存在一些逻辑错误?

最佳答案

是的,您应该在new 的开头创建一个新的 session 实例。之后您也不需要调用 expunge_all。 session 对象不需要任何费用,因此您可以随心所欲地使用它们。

但是,这段代码还是很奇怪。您确定我下面的示例不是您想要的吗?

您的映射类定义:

class MyObject(Base):
def __init__(self, *args, **kwargs):
self.firstname = kwargs['firstname']
self.lastname = kwargs['lastname']

和用法:

session = Session()
my_ob = MyObject(firstname='John', lastname='Smith')
session.add(my_ob)
session.commit()
session.close()

关于python - 如何使 session.expunge_all() 工作以从 SQLAlchemy 中的 session 中分离所有实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20968189/

81 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com