【发布时间】:2021-03-18 20:39:41
【问题描述】:
我对这个问题不太了解,正在尝试找出如何消除表格中的重复项。
我使用 sqlite ( app.config["SQLALCHEMY_DATABASE_URI"] = f"sqlite:///{DATABASE_PATH}" )
我有一张快递员表和一张快递员工作区域表。 我还有一个表格,可以链接快递员 ID 和地区 ID。
这里有一些代码:
couriers_regions_relationship = db.Table(
"couriers_regions",
db.Column("courier_id", db.Integer, db.ForeignKey("couriers.id")),
db.Column("region_id", db.Integer, db.ForeignKey("regions.id")),
)
class Couriers(db.Model):
__tablename__ = "couriers"
id = db.Column(db.Integer, primary_key=True)
regions = db.relationship("Regions", secondary=couriers_regions_relationship, lazy='dynamic')
...
class Regions(db.Model):
__tablename__ = "regions"
id = db.Column(db.Integer, primary_key=True)
region = db.Column(db.Integer)
...
当我像这样创建一个表并向其中添加快递员时:
regions = [123, 77, 103]
new_courier = Couriers()
for region in regions:
new_courier.regions.append(Regions(region=region))
db.session.add(new_courier)
db.session.commit()
...
regions = [123, 77, 103]
other_courier = Couriers()
for region in regions:
other_courier.regions.append(Regions(region=region))
db.session.add(new_courier)
db.session.commit()
...
我得到以下表格:
couriers:
id | ...
---|-----
1 | ...
2 | ...
regions:
id | region | ...
---|--------|-----
1 | 123 | ...
2 | 77 | ...
3 | 103 | ...
4 | 123 | ...
5 | 77 | ...
6 | 103 | ...
couriers_regions:
courier_id | region_id
-----------|-----------
1 | 1
1 | 2
1 | 3
2 | 4
2 | 5
2 | 6
如您所见,“地区”表中的数据是重复的。
我想得到什么:
couriers:
id | ...
---|-----
1 | ...
2 | ...
regions:
id | region | ...
---|--------|-----
1 | 123 | ...
2 | 77 | ...
3 | 103 | ...
couriers_regions:
courier_id | region_id
-----------|-----------
1 | 1
1 | 2
1 | 3
2 | 1
2 | 2
2 | 3
我阅读了 sqlalchemy 文档和 flask_sqlalchemy 文档中的关系文档。在那里找不到任何关于它的信息。 我还尝试设置标志“unique=True”和“primary_key=True”,但没有帮助。
附言
- 重复区域完全相同
- 当然,我可以自己查看表格并搜索或创建我需要的区域、链接,但我想找到更优雅的解决方案
【问题讨论】:
标签: python sqlalchemy flask-sqlalchemy