SQLAlchemy και τις σχέσεις φιάλη

ψήφοι
1

UPDATE: Χάρη σε ένα από τα σχόλια που πήρα πιο κοντά, είχα προσθέσει τον πίνακα σύνδεσης:

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)
)

Δούλεψε αρκετά καλά, στο κέλυφος ήμουν σε θέση να:

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()

Επειτα:

rp.restaraunt.name
['Five Guys']

ΦΟΒΕΡΟΣ. ΑΛΛΑ ... η db.session.add (RP) προσθέτει διπλές καταχωρήσεις στον πίνακα RestarauntPreferences; Κάτι με το πώς θα δηλώσει τη σχέση; Κάτι άλλο δεν έχω πάρει για SQLAlchemy και φιάλη; (Και χρησιμοποιώντας το πρόγραμμα περιήγησης db να εξετάσουμε την SQLite βάση δεδομένων, ο πίνακας ένωση δεν έχει πληροφορίες σε αυτό αφού εκτελέσετε τις εντολές του κελύφους, δεν είναι σίγουρος αν αυτό είναι σωστό ... ή όχι;)

Orig POST: (Μοντέλα παρακάτω)

Προσπαθούσα να χτίσει αυτό το μικρό app φιάλη που χρησιμοποιεί SQLAlchemy. Τα μοντέλα Προσπαθώ να συνεργαστεί με την εργασία και τις σχέσεις με τα πολλά-προς-πολλά. Περιγράφονται παρακάτω με το πώς θέλω να τα χρησιμοποιούν.

(Ουσιαστικά ο χρήστης μπορεί να δώσει μια βαθμολογία σε πολλαπλές εστιατόρια)

#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)
Δημοσιεύθηκε 07/11/2018 στις 23:56
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
1

Και οι δύο, Φιάλη-Sqlalchemy και Sqlalchemy , τεκμηριώσεις αναφέρει ότι ο πίνακας σύνδεσης που απαιτούνται για μια πολλά-προς-πολλά για να εργαστούν. Δοκιμάστε να δημιουργήσετε αυτό, όπως στα παραδείγματα και προσθέστε τη δήλωση σας ως secondaryπαράμετρος.

Απαντήθηκε 08/11/2018 στις 08:15
πηγή χρήστη

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