在SQLAlchemy中为用户创建新的个人表

2024-06-13 08:03:51 发布

您现在位置:Python中文网/ 问答频道 /正文

有人能帮我解决下面的问题吗

  • 我在sqlalchemy有一张叫做“Person”的桌子
  • 每个人都有一个唯一的“名字”
  • “Person”表与基于“name”字段的“Pet”表有关系

我希望Person表中的每个人都可以拥有与其他人同名的宠物,但一个人不能拥有两个同名的宠物,但我不确定如何建模/编码

个人:兹比塞克

  1. 宠物:Flufi-年龄:3
  2. 宠物:辣椒-年龄:2

人物:乔恩

  1. 宠物:辣椒-年龄:4

代码:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///sql1.db'
db = SQLAlchemy(app)

class Person(db.Model):

    __tablename__ = 'person'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20), unique=True)
    pets = db.relationship('Pet', backref='owner')
    
class Pet(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20), unique=True)
    age = db.Column(db.Integer)
    owner_id = db.Column(db.Integer, db.ForeignKey('person.id'))
     

Tags: namefromidtrueapp宠物dbsqlalchemy
1条回答
网友
1楼 · 发布于 2024-06-13 08:03:51

如果可以有多个宠物使用unique=True这个名字,即使它们属于不同的人,也不能在宠物上使用unique=True标签。删除它是没有问题的,我不明白为什么你会要求名字是唯一的,因为你显然希望多个宠物有相同的名字。因为宠物的ID是唯一的,所以名称不必是唯一的

如果您现在只希望每个宠物名中的一个可供一个人使用,则需要将其设置为宠物的表参数。这样,同一主人的两只宠物就不能有相同的名字

更新宠物类别:

class Pet(db.Model):
    __table_args__ = (db.UniqueConstraint('owner_id ', 'name', name='owner_pet_uc'),)
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(20))
    age = db.Column(db.Integer)
    owner_id = db.Column(db.Integer, db.ForeignKey('person.id'))

相关问题 更多 >