2016-05-05 4 views
0

Я после этого руководства - http://docs.sqlalchemy.org/en/rel_1_0/orm/tutorial.htmlДобавление в нескольких внешних ключей в SQLAlchemy

Вот мой код

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='[email protected]')] 

Я пытаюсь выяснить, как добавить несколько адресов электронной почты в запись Джека после факта. Когда я пытаюсь снова

candidate.addresses = [Address(email_address='[email protected]')] 

стирает внешний ключ для [email protected] в таблице адресов (она изначально была 1) и делает его NULL.

Как добавить несколько внешних ключей после создания начальной записи?

+0

просто должны быть в состоянии сделать 'кандидата. address.append (Адрес (email_address = "[email protected]")) ' – reptilicus

ответ

0

Вместо того чтобы делать:

candidate.addresses = [Address(email_address='[email protected]')] 

, если вам нужно добавить адрес кандидата после того, как они уже созданы, сделайте следующее:

candidate.addresses.append(Address(email_address="[email protected]")) 
db_session.commit() 
+0

Спасибо тонну !!! –

Смежные вопросы