SQLAlchemy:有效地添加具有关系的行

时间:2017-06-07 02:16:31

标签: python performance sqlalchemy

这是我的问题的玩具示例。我有两个具有一对多关系的表,在SQLAlchemy模型中定义如下:

class Author(Base):
    __tablename__ = 'authors'

    id = Column(Integer, primary_key=True, autoincrement=True)
    author_name = Column(String(32))
    articles = relationship('Article', back_populates='author')

class Article(Base):
    __tablename__ = 'articles'

    id = Column(Integer, primary_key=True, autoincrement=True)
    author_id = Column('author', Integer, ForeignKey('authors.id'))
    author = relationship('Author', back_populates='articles')
    article_text = Column(String)

当我添加新帖子时,作者姓名将作为Article.author字段中的字符串传入。在向数据库添加文章时,要在它与作者之间创建链接,我通过查询用户名来检查用户是否存在,然后获取该用户的模型对象:

def get_user(post, session):
    if session.query(exists().where(User.username==post.user)).scalar():
        user = session.query(User).filter_by(username=post.user).first()
        post.user = user
    return post

def insert_post(post, session):
    post = get_user(post, session)
    try:
        session.add(row)
        session.commit()
    except:
        session.rollback()
    finally:
        session.close()

这种方法很好,但速度很慢(插入约200,000篇文章需要几十分钟)。如果它有助于了解,我正在使用MySQL。

我觉得我要么做出不必要的查询,要么误解了如何使ForeignKey关系有效。或许这是完全正常的?

0 个答案:

没有答案