所以我是 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))
我是一名优秀的程序员,十分优秀!