内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

SQLAlchemy many to many

2018-02-13 14:53 出处:清屏网 人气: 评论(0

SQLAlchemy是一个Python的数据库ORM框架. 介绍下如何使用SQLAlchemy 定义 many to many

一个招标信息采集项目需要用到,下面招标信息(  TradeInfo  )和关键词( Keyword   )的关系来作为介绍范例.

  1. 一条招标信息可以通过多个关键词来检索
  2. 一个关键词可以对应多条招标信息.

首先我们先创建两个Sqlalchemy的模型类:

# define Trade Info Object
class TradeInfo(Base):
    __tablename__ = 'trade_info'

    # 表的结构:
    trade_id = Column(Integer, primary_key=True, autoincrement=True)
    trade_city = Column(String(20))
    trade_title = Column(String(100))
    trade_content = Column(String)
    trade_link = Column(String(256))
    trade_date = Column(String)

    keywords = relationship('Keyword', secondary=trade_info_has_keyword_table)

# define Keyword object:
class Keyword(Base):
    # table name
    __tablename__ = 'keyword'

    # table fields
    keyword_id = Column(Integer, primary_key=True,autoincrement=True)
    keyword = Column(String(20),unique=True)

    trades = relationship('TradeInfo', secondary=trade_info_has_keyword_table)

我们创建了两个模型, 分别是TradeInfo和Keyword   ,需要在TradeInfo里添加 many to many 关系,在TradeInfo对象中直接获取关联的Keyword列表,

那么我们就需要在TradeInfo 模型中添加:

keywords = relationship('Keyword', secondary=trade_info_has_keyword_table)

通过指定relationship如下:

# many to many releations of Trade and Keyword
trade_info_has_keyword_table = Table(
    'trade_info_has_keyword', Base.metadata,
    Column('trade_info_trade_id', Integer, ForeignKey('trade_info.trade_id'),primary_key=True),
    Column('keyword_keyword_id', Integer, ForeignKey('keyword.keyword_id'),primary_key=True)
)


# Test funciton
new_trade = TradeInfo(trade_title='test')
session.add(new_trade)
new_key = Keyword( keyword = 'test key1' )
new_key2 = Keyword( keyword = 'test key2' )
session.add(new_key)
session.add(new_key2)
new_trade.keywords.append(new_key)
new_trade.keywords.append(new_key2)
session.commit()
session.close()
分享给小伙伴们:
本文标签: SQLAlchemy

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号