【发布时间】:2020-03-23 05:13:15
【问题描述】:
我在我的 Flask-Sqlalchemy 模型中创建了多对多关系。但是,我似乎不太了解如何填充我的数据库。你能告诉我我应该如何编写代码来正确填充我的数据库吗?
这是我的模型:
company_contact = db.Table('company_contact', db.Model.metadata,
db.Column('company_id', Integer, ForeignKey('company.id')),
db.Column('contact_id', Integer, ForeignKey('contact.id'))
)
class Company(db.Model):
__tablename__ = 'company'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
contacts = db.relationship('Contact', secondary=company_contact, back_populates="companies")
company_name = db.Column(db.String(100))
def __repr__(self):
return '<Company {}{}>'.format(self.contacts, self.company_name)
class Contact(db.Model):
__tablename__ = 'contact'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
last_name = db.Column(db.String(255))
first_name = db.Column(db.String(255))
job_position = db.Column(db.String(255))
companies = db.relationship('Company', secondary=company_contact, back_populates="contacts")
contact_status = db.Column(db.Enum('Client', 'Prospect', 'Churner', 'Prestataire', 'Reperage',
name='contact_status'))
start_date = db.Column(db.DateTime, server_default=db.func.now())
stop_date = db.Column(db.DateTime, default=None)
def __repr__(self):
return '<Contact {}>'.format(self.last_name, self.first_name, self.job_position, self.companys,
self.contact_status, self.start_date, self.stop_date)
我想要做的是添加两个具有相同公司名称的联系人。添加第一个不是问题,一切正常。但是,对于第二个联系人,当我添加此代码时会出现问题。
com = Company(company_name='bla')
con = Contact(last_name='Blabla', first_name='Jeff', job_position='Resp Marketing',contact_status='Client')
con.companies.append(com)
db.session.add(con)
db.session.commit()
sqlalchemy.exc.IntegrityError: (psycopg2.errors.UniqueViolation) 重复键值违反了唯一约束“company_company_name_key” 详细信息:键 (company_name)=(bla) 已存在。
我不知道如何写它来允许,两个联系人与同一家公司,也允许两个公司具有相同的联系人。
非常感谢您的帮助。
【问题讨论】:
标签: python flask sqlalchemy many-to-many flask-sqlalchemy