Pas*_*day 6 python orm sqlalchemy
我正在寻找一种方法将"类别"子项添加到"对象"实体,而不会浪费首先加载子对象的性能.
"对象"和"类别"表与多对多关系链接,存储在"ObjectCategory"表中."对象"模型随关系提供:
categories = relationship('Category', secondary = 'ObjectCategory', backref = 'objects')
Run Code Online (Sandbox Code Playgroud)
现在这段代码工作得很好:
obj = models.Object.query.get(9)
cat1 = models.Category.query.get(22)
cat2 = models.Category.query.get(28)
obj.categories.extend([cat1, cat2])
Run Code Online (Sandbox Code Playgroud)
但是在调试输出中,我看到实例化obj,除了单个批量INSERT命令之外,每个类别都花费了我对数据库服务器的单独SELECT命令.在这种情况下完全不需要,因为我对操纵给定的类别对象不感兴趣.基本上我只需要很好地插入适当的类别ID.
最明显的解决方案是继续直接在关联表中插入条目:
db.session.add(models.ObjectCategory(oct_objID=9, oct_catID=22))
db.session.add(models.ObjectCategory(oct_objID=9, oct_catID=28))
Run Code Online (Sandbox Code Playgroud)
但是这种方法有点难看,它似乎没有使用抽象的SQLAlchemy关系的强大功能.更重要的是它为每个add()生成单独的INSERT,而不是像obj.categories.extend([list])这样的大块INSERT.我想可能会有一些惰性对象模式让对象只能使用它的ID(未经验证)并仅在请求时加载其他字段.这将允许添加的孩子一到一对多或多对一一对多的关系,而不发出任何SELECT到数据库中,但让使用功能强大的ORM的抽象(即治疗儿童名单以Python列表).
我应该如何调整我的代码以使用SQLAlchemy的强大功能执行此任务,但对数据库的使用保守?
您是否有 ObjectCategory 表的 ORM 映射?如果是这样,您可以创建并添加 ObjectCategory 对象:
session.add(ObjectCategory(obj_id=9, category_id=22)
session.add(ObjectCategory(obj_id=9, category_id=28)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1711 次 |
最近记录: |