gpt4 book ai didi

python - 如何使用 SQLAlchemy 在一次提交中切换唯一行的两个字段?

转载 作者:太空狗 更新时间:2023-10-29 22:23:31 29 4
gpt4 key购买 nike

假设有一个具有唯一名称的对象。现在你想交换两个对象的名称:

这是布局:

import sqlalchemy as sa
import sqlalchemy.orm as orm
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class MyObject(Base):
__tablename__ = 'my_objects'
id = sa.Column(sa.Integer, primary_key=True)
name = sa.Column(sa.Text, unique=True)

if __name__ == "__main__":
engine = sa.create_engine('sqlite:///:memory:', echo=True)
Session = orm.sessionmaker(bind=engine)
Base.metadata.create_all(engine)
session = Session()

我想这样做:

a = MyObject(name="Max")
b = MyObject(name="Moritz")
session.add_all([a, b])
session.commit()

# Now: switch names!
tmp = a.name
a.name = b.name
b.name = tmp
session.commit()

这会抛出一个 IntegrityError。有没有办法在一次提交中切换这些字段而不会出现此错误?

最佳答案

一个更纯粹的选择是删除 a,重命名 b,然后重新添加一个重命名的:

session.delete(a)
sqlalchemy.orm.session.make_transient(a)
a.name, b.name = b.name, a.name
session.flush()
session.add(a)
session.commit()

关于python - 如何使用 SQLAlchemy 在一次提交中切换唯一行的两个字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9109915/

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