簡體   English   中英

在SQLAlchemy中添加多個外鍵

[英]Adding in multiple foreign keys in SQLAlchemy

我正在遵循本指南-http://docs.sqlalchemy.org/en/rel_1_0/orm/tutorial.html

這是我的代碼

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship 

engine = create_engine('sqlite:///test.db', echo=True)
Base = declarative_base()
Session = sessionmaker(bind=engine)
session = Session()

class User(Base):
  __tablename__ = 'users'
  id = Column(Integer, primary_key=True)
  name = Column(String)
  fullname = Column(String)
  password = Column(String)
  def __repr__(self):
    return "<User(name='%s', fullname='%s', password='%s')>" % (self.name, self.fullname, self.password)

class Address(Base):
  __tablename__ = 'addresses'
  id = Column(Integer, primary_key = True)
  email_address = Column(String, nullable=False)
  user_id = Column(Integer, ForeignKey('users.id'))
  user = relationship("User", back_populates = 'addresses')
  def __repr__(self):
    return "<Address(email_address='%s')>" %self.email_address

User.addresses = relationship ("Address", order_by=Address.id, back_populates="user")


Base.metadata.create_all(engine)

當我為User表創建記錄時,我會這樣做:

candidate = User(name='Jack', fullname='Jack Bean', password='blah')

為了添加電子郵件地址,我這樣做是這樣的(遵循指南):

candidate.addresses = [Address(email_address='jack_bean@gmail.com')]

我試圖弄清楚事實之后如何在傑克的記錄中添加多個電子郵件地址。 當我再試一次

candidate.addresses = [Address(email_address='jack@gmail.com')]

它將擦除地址表中jack_bean@gmail.com的外鍵(最初為1)並將其設置為NULL

創建初始記錄后如何添加多個外鍵?

而不是做:

candidate.addresses = [Address(email_address='jack_bean@gmail.com')]

如果在創建候選人后需要向其添加地址,請執行以下操作:

candidate.addresses.append(Address(email_address="new@new.com"))
db_session.commit()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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