[英]One to many relationship in SQLAlchemy
我在SQLAlchemy中具有以下一對多關系。
class Application(Base):
__tablename__ = "application"
id = Column("id", Integer, primary_key = True, autoincrement = True)
organization_id = Column(Integer, ForeignKey('organization.id'))
organization = relationship("Organization", uselist=False, back_populates="applications")
和
class Organization(Base):
__tablename__ = "organization"
id = Column("id", Integer, primary_key = True, autoincrement = True)
name = Column("name", String(128), unique = True, nullable = False)
applications = relationship("Application", back_populates="organization")
簡而言之,“一個組織可以有多個應用程序,而一個應用程序可以只有一個組織”。
我推斷的方式是Organization
類是父類, Application
類是子類。
我有一個.csv文件,其中包含應用程序列表。 我正在解析列表以從每一行創建一個Application
和Organization
實例。 然后,我設置application.organization = organization
,然后執行session.add(application)
。
當我將應用程序添加到數據庫時,如果是第一次添加的組織又是第一次添加,則將其正確插入。 但是,當發現某個應用程序與插入的應用程序具有相同的組織之前,它會抱怨一個錯誤:
sqlalchemy.exc.IntegrityError:(pymysql.err.IntegrityError)(1062,“鍵'name'的條目'MICROSOFT'重復”)
我了解這是因為該組織已經存在於數據庫中。
SQLAlchemy不會處理這種情況嗎? 如果沒有,我該如何處理?
您可能每次都在創建一個新的組織,而不是獲取一個已經存在的組織(如果存在)。
該代碼應為您指明正確的方向
# Organization name from your CSV
org_name = 'MICROSOFT'
# Get Organization if it already exists
application.organization = Organization.query.filter(Organization.name == org_name ).first()
# If the Organization doesn't exist, create a new one
if application.organization is None:
application.organization = Organization(name=org_name)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.