2016-05-05 13 views
0

Hinzufügen ich diesem Handbuch folgende bin - http://docs.sqlalchemy.org/en/rel_1_0/orm/tutorial.htmlin mehrere Fremdschlüssel in SQLAlchemy

Hier mein Code

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) 

ist, wenn ich einen Datensatz für die User Tabelle zu erstellen, ich mache es wie folgt aus:

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

Und in E-Mail-Adressen hinzufügen, ich tue es dies wie (nach der Anleitung):

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

Ich versuche herauszufinden, wie man Jacks Protokoll nach der Tat mehrere E-Mail-Adressen hinzufügen kann. Als ich es erneut versuchen

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

Es löscht den Fremdschlüssel für [email protected] in der Adresstabelle (es war ursprünglich 1) und macht es NULL.

Wie füge ich nach dem Erstellen des ersten Datensatzes mehrere Fremdschlüssel hinzu?

+0

sollte nur in der Lage sein, 'Kandidaten zu tun. addresses.append (Adresse (email_adresse = "[email protected]")) ' – reptilicus

Antwort

0

Statt tun:

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

wenn Sie eine Adresse zu einem Kandidaten hinzufügen müssen, nachdem sie bereits erstellt worden ist, dies tun:

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

Vielen Dank !!! –

Verwandte Themen