我想创建一个像这样的自我关系表...
group_id | title | parent_id
-------- | ----- | ---------
1 |mobile | null
2 |Sony | 1
3 |Samsung | 1
4 |Laptop | null
5 |ASUS | 4
6 |Dell | 4
因此 group_id 是表格的主键,而parent_id是外键。我该如何修改此类 Flask SQL Alchemy ?
class ProductGroup(db.Model):
__tablename__ = "product_group"
id = db.Column(db.Integer, primary_key = True)
title = db.Column(db.String(150), unique = True)
parent_id = db.Column(db.Integer)
def __init__(self, title, parent_id):
self.title = title
self.parent_id = parent_id
def __repr__(self):
return '<ProductGroup: {}>'.format(self.title)
另外,我如何给出这个表和我的产品表的关系?以下是我的产品表。我想为这个表创建类别表。
class Product(db.Model):
"""
Create Product Table
"""
__tablename__ = 'products'
id = db.Column(db.Integer, primary_key = True)
name = db.Column(db.String(64), unique = True)
summary = db.Column(db.String(512))
features = db.Column(db.String(256))
description = db.Column(db.String(1024))
thumbnail = db.Column(db.String(128))
picture = db.Column(db.String(128))
video = db.Column(db.String(128))
def __init__(self, name, summary, features, description, thumbnail, picture, video):
self.name = name
self.summary = summary
self.features = features
self.description = description
self.thumbnail = thumbnail
self.picture = picture
self.video = video
def __repr__(self):
return '<Product: {}>'.format(self.name)
请不要犹豫,为分类产品和帖子表提供更好的解决方案。
答案 0 :(得分:0)
对于自引用,您必须使用与remote_side参数的关系来支持多对一关系。
parent_id = relationship("ProductGroup", remote_side=[id])
您可以在此处阅读更多内容:enter link description here
答案 1 :(得分:-1)
首先,请将您的product_group
表格中的数据库记录设置如下。
并且,请按照以下方式修改您的代码。
class ProductGroup(db.Model):
__tablename__ = "product_group"
id = db.Column(db.Integer, primary_key = True)
title = db.Column(db.String(150), unique = True)
parent_id = db.Column(db.Integer)
group = db.relationship("ProductGroup", primaryjoin="ProductGroup.id==ProductGroup.parent_id", foreign_keys='ProductGroup.id')
def __init__(self, title, parent_id):
self.title = title
self.parent_id = parent_id
def __repr__(self):
return '<ProductGroup: {}>'.format(self.title)
并且,您可以按如下方式访问group
属性。
product_group = ProductGroup.query.get(2)
print(product_group.group)
你会得到
[<ProductGroup: mobile>]
这是你想要的吗?
顺便提一下,如果您定义group
的{{1}}属性如下,
product_group
你将获得作为对象而非数组的价值。