2017-07-19 3 views
-1

Ich möchte ein Profil für den Benutzer in Beziehungen Beziehungen Tabellen erstellen. Wie kann ich das für den Benutzer und das Profil des Benutzers tun?SQL Alchemy Eins zu Eins (Kolben)

Auch ich möchte zeigen, verbinden sie zusammen .. Wie kann ich Profil und Benutzer Tabelle für CRUD-Operationen beizutreten.

Vielen Dank ..

class User(UserMixin, db.Model): 
    __tablename__ = 'users' 
    id = db.Column('user_id', db.Integer, primary_key = True) 
    email = db.Column(db.String(128), unique = True) 
    password = db.Column(db.String(200)) 
    is_admin = db.Column(db.Boolean, default=False) 
    is_active = db.Column(db.Boolean, default = False) 
    token = db.Column(db.String(100), unique = True) 
    profile = relationship("Profile", lazy = "joined") 

    def __init__(self, email, password, token, is_admin = False, is_active = False): 
     self.email = email 
     self.password = self.GenerateHash(password) 
     self.is_active = is_active 
     self.is_admin = is_admin 
     self.token = token 

Klasse Profil

Antwort

0

Sie haben diese Zeile in der Benutzer Tabelle ändern:

profile = relationship("Profile", lazy = "joined") 

von

profile = relationship("Profile", uselist=False, back_populates="users") 

und in der Profil Klasse:

class Profile(db.Model): 
    __tablename__ = 'profiles' 
    id = Column(Integer, primary_key=True) 
    user_id = Column(Integer, ForeignKey('user.id')) 
    user = relationship("User", back_populates="profiles") 

können Sie überprüfen die Dokumentation here

Edit: da es keine Angabe über die Profil Klasse ist ich die Super als db ändern. Modell

+0

Vielen Dank für Ihre Antwort, was ist die Bedeutung von back_populate in Beziehungen? –

+0

Es wird verwendet, um sqlalchemy die Verbindung zwischen beiden Tabellen wissen zu lassen, Sie können es vermeiden, indem Sie 'backref' stattdessen verwenden. [Diese Antwort] (https://stackoverflow.com/a/39870250) ist eine gute Erklärung. –