SQLAlchemy und Kolben Beziehungen

stimmen
1

UPDATE: Dank einer der Kommentare, die ich näher kam, habe ich den Verein Tabelle hinzu:

association = db.Table('association',
    db.Column('user_id', db.Integer, db.ForeignKey('user.id'), primary_key=True),
    db.Column('restaraunt_id', db.Integer, db.ForeignKey('restaraunt.id'), primary_key=True)
)

Es funktionierte ziemlich gut, in der Schale i war in der Lage:

u=User(username='bob', email='bob@villa.com')
db.session.add(u)
db.session.commit()
r=Restaraunt(name='Five Guys', costRating=4)
db.session.add(r)
db.session.commit()
rp=RestarauntPreferences(user=u, restaraunt=r, rating=0)
db.session.add(rp)
db.session.commit()

Dann:

rp.restaraunt.name
['Five Guys']

GENIAL. ABER ... die db.session.add (rp) fügt doppelte Einträge in die RestarauntPreferences Tabelle? Etwas mit, wie ich den Verein erklärt? Etwas, was ich immer bin nicht über SQLAlchemy und Kolben? (Und mit db-Browser auf der SQLite-Datenbank zu suchen, hat die Zuordnungstabelle keine Information in ihm, nachdem ich die Shell-Befehle ausführen, nicht sicher, ob dies richtig ist ... oder nicht?)

ORIG POST: (Modelle unten)

Ich habe versucht, diese kleine Flasche Anwendung zu erstellen, die SQLAlchemy verwendet. Die Modelle Ich versuche mit mit und Arbeitsbeziehungen zu arbeiten, sind viele-zu-viele. Sie werden im Folgenden beschrieben mit, wie ich will, sie benutzen.

(Im Wesentlichen kann ein Benutzer eine Bewertung zu mehreren Restaurants geben)

#how do I use these??

rprefs=RestarauntPreferences.query.filter_by(user=current_user) 
rprefs.restaraunt.name   #doesn't work, doesn't know what restaraunt is

#models below

class User(UserMixin, db.Model):
    __tablename__ = 'user'

    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(120), index=True, unique=True)
    password_hash = db.Column(db.String(128))
    recipient_idf= db.Column(db.String(256))
    first_name = db.Column(db.String(128))
    last_name = db.Column(db.String(128))
    most_recent_lunch_date = db.Column(db.DateTime)
    lunch_Rating = db.Column(db.Integer)
    phone_number = db.Column(db.String(128))

    def set_password(self, password):
        self.password_hash = generate_password_hash(password)

    def check_password(self, password):
        return check_password_hash(self.password_hash, password)

    def __repr__(self):
        return '<User {} {}>'.format(self.username, self.recipient_idf)


class Restaraunt(db.Model):
    __tablename__ = 'restaraunt'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(128))
    costRating = db.Column(db.Integer)

    def __repr__(self):
        return '<Restaraunt {} {}>'.format(self.name, self.costRating)


class RestarauntPreferences(db.Model):
    __tablename__ = 'restaraunt_preferences'
    id = db.Column(db.Integer, primary_key=True)

    restaraunt_id = db.Column(db.Integer, db.ForeignKey('restaraunt.id'))
    restaraunt = relationship(Restaraunt, foreign_keys=[restaraunt_id])

    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    user = relationship(User, foreign_keys=[user_id])

    rating = db.Column(db.Integer)


    def __repr__(self):
        return '<RestarauntPref {} {} {}>'.format(self.restaraunt_id, self.user_id, self.rating)
Veröffentlicht am 07/11/2018 um 23:56
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
1

Beide, Flask-sqlalchemy und sqlalchemy , geben Dokumentationen , dass eine Zuordnungstabelle für eine many-to-many - Beziehung zur Arbeit benötigt. Versuchen Sie es wie in den Beispielen Erstellen und hinzufügen, um auf Ihre Erklärung secondaryparam.

Beantwortet am 08/11/2018 um 08:15
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more