flask-sqlarchemy 多对多关联如何定义?使用的是第三张表,不知道怎么查询,可能定义有错误

2018-03-21 11:49:18 +08:00
 sevenQu

背景:一个主题可以对应多个产品,一个产品可以属于多个主题
我也不想使用第三张表,但是人家已经给我了 sql 文件,我只能使用,要不怎么读取人家的数据

class Theme_Product(db.Model):
    __tablename__ = 'theme_product'
    theme_id=db.Column(db.Integer,db.ForeignKey('theme.id'), primary_key=True)
    product_id=db.Column(db.Integer,db.ForeignKey('product.id'), primary_key=True)
class Theme(db.Model):
    __tablename__ = 'theme'
    id = db.Column(db.Integer, primary_key=True)
    productInTheme=db.relationship('Theme_Product',
                                    foreign_keys=[Theme_Product.theme_id],
                                    backref=db.backref('backTheme',lazy='joined'),
                                    lazy='dynamic',
                                    cascade='all,delete-orphan')
class Product(db.Model):
    __tablename__ = 'product'
    id = db.Column(db.Integer, primary_key=True)
    theme=db.relationship('Theme_Product',
                            foreign_keys=[Theme_Product.product_id],
                            backref=db.backref('backProduct', lazy='joined'),
                            lazy='dynamic',
                            cascade='all,delete-orphan')

-----------------------跪求指点,如何查询--------------------------------

1818 次点击
所在节点    Python
3 条回复
vZexc0m
2018-03-21 13:44:24 +08:00
```
tags = db.Table('article_tag',
db.Column('article_id', db.Integer(), db.ForeignKey('article.id')),
db.Column('tag_id', db.Integer(), db.ForeignKey('tag.id')))


class Article(db.Model):
id = db.Column(db.Integer(), primary_key=True)
title = db.Column(db.String(255))
text = db.Column(db.Text())
publish_time = db.Column(db.DateTime(), default=datetime.datetime.utcnow)
comments = db.relationship("Comment", backref='article', lazy='dynamic')
tags = db.relationship('Tag',
secondary=tags,
backref=db.backref('article', lazy='dynamic'))

def json(self):
return dict(
id=self.id,
title=self.title,
text=self.text,
publish_time=utc_local(self.publish_time),
username=self.user.username,
tags=[tag.name for tag in self.tags]
)

def __str__(self):
return "<Article {}>".format(self.title)

def __repr__(self):
return "<Article {}>".format(self.title)


class Tag(db.Model):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(255))

def __str__(self):
return "<Tag {}>".format(self.name)

def __repr__(self):
return "<Tag {}>".format(self.name)
```
sevenQu
2018-03-21 15:03:45 +08:00
@vZexc0m 这样定义,第三张表的数据怎么用?这样数据只能从零开始吧
kimchan
2018-03-22 16:59:38 +08:00
@sevenQu 看 1 楼代码的 relationship 的定义. 就是用那个去使用

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/440012

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX