这是我的问题的玩具示例。我有两个具有一对多关系的表,在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关系有效。或许这是完全正常的?