Pep*_*zza 7 python sqlalchemy bulk
我试图通过减少对数据库的调用来优化我的代码。我有以下型号:
class PageCategory(Base):
category_id = Column(Text, ForeignKey('category.category_id'), primary_key=True)
page_id = Column(Text, ForeignKey('page.page_id'), primary_key=True)
class Category(Base):
category_id = Column(Text, primary_key=True)
name = Column(Text, nullable=False)
pages = relationship('Page', secondary='page_category')
class Page(Base):
page_id = Column(Text, primary_key=True)
name = Column(Text, nullable=False)
categories = relationship('Category', secondary='page_category')
Run Code Online (Sandbox Code Playgroud)
该代码接收 Facebook 点赞流,每个点赞都带有一个PageaCategory以及它们之间的明显关系 a PageCategory。我需要找到一种方法来批量创建(如果尚不存在)不同的页面、类别以及它们之间的关系。鉴于代码需要很快,我无法在创建每个对象时来回访问数据库。
page = Page(page_id='1', name='1')
category = Category(category_id='2', name='2')
session.add(page)
session.add(category)
session.commit()
...same for PageCategory
Run Code Online (Sandbox Code Playgroud)
现在,鉴于 apage_id和category_idPK,IntegrityError如果我们尝试插入重复项,数据库将引发 a ,但这仍然是往返舞蹈。我需要一个实用程序来接收,比如一个对象列表,session.bulk_save_objects([page1, page2, category1, category2, page_category1, page_category2])但只是创建不会引发 IntegrityError 的对象,而忽略那些会引发的对象。
这样,我将避免为每个三元组对象使用数据库 IO。我不知道这是否可行,或者这是否超出了 SQLAlchemy 的能力。
| 归档时间: |
|
| 查看次数: |
412 次 |
| 最近记录: |