簡體   English   中英

SQLAlchemy中的一對多關系

[英]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文件,其中包含應用程序列表。 我正在解析列表以從每一行創建一個ApplicationOrganization實例。 然后,我設置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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM