gpt4 book ai didi

Python SQLAlchemy after_insert MapperEvent

转载 作者:太空宇宙 更新时间:2023-11-03 12:32:52 24 4
gpt4 key购买 nike

所以我是 SQLAlchemy 的新手,我希望在创建新的 User 对象后默认创建一个 Permissions 对象。阅读文档似乎我应该使用 after_insert 映射器事件。问题是事件监听器在对象实际提交之前被调用。

有没有办法让 Permissions 对象至少放在可能的事务中或在实际提交用户对象后要创建的对象列表中。

class Users():
__tablename__ = 'users'
user_id = Column(String(36), primary_key=True, nullable=False)


class Permissions():
__tablename__ = 'permissions'
user_id = Column(String(36), ForeignKey('users.user_id'), primary_key=True,
nullable=False)


@event.listens_for(Users, "after_insert")
def create_permissions(mapper, connection, user):
connection.execute(Permissions.__table__.insert(user_id=user.user_id))

IntegrityError: (IntegrityError) (1452, '无法添加或更新子行:外键约束失败

理想情况下,我希望在用户表上没有数据库触发器的情况下执行此操作。

最佳答案

您不需要将 session 附加到 ORM 对象。只需使用 sqlalchemy.orm 模块中的 object_session 函数,如下所示:

from sqlalchemy.orm import object_session

@event.listens_for(Users, 'after_insert')
def create_permissions(mapper, connection, user):
object_session(user).add(Permissions(user_id=user.user_id))

关于Python SQLAlchemy after_insert MapperEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14529046/

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