Błąd z relacją One to Many w bazie danych, Flask

Odpowiedz Nowy wątek
2018-06-20 14:14

Rejestracja: 3 lata temu

Ostatnio: 2 lata temu

0

Witam,

W kodzie:

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    image_file = db.Column(db.String(120), nullable=False, default='default.jpg')
    password = db.Column(db.String(60), nullable=False)
    posts = db.relationship('Post', backref='author', lazy=True) #  TU JESTES

    def __repr__(self):
        return 'User({}, {}, {})'.format(self.username, self.email, self.image_file)

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    content = db.Column(db.Text, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))

    def __repr__(self):
        return 'Post({}, {})'.format(self.title, self.date_posted)

mam błąd:

sqlalchemy.exc.InvalidRequestError: One or more mappers failed to initialize - can't proceed with initialization of other mappers. Triggering mapper: 'Mapper|User|user'. Original exception was: Could not determine join condition between parent/child tables on relationship User.posts - there are no foreign keys linking these tables.  Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or specify a 'primaryjoin' expression.

Czytałem parę postów o takich kłopotach, ale i tka nie mogę tego ogarnąć.
W którym miejscu nazwy nie są zgodne?

Pozdro

Pozostało 580 znaków

2018-06-20 15:01

Rejestracja: 3 lata temu

Ostatnio: 46 sekund temu

user_id = db.Column(db.Integer, db.ForeignKey('User.id'))

? miales z malej usera

edytowany 1x, ostatnio: stivens, 2018-06-20 15:01

Pozostało 580 znaków

2018-06-20 16:28

Rejestracja: 3 lata temu

Ostatnio: 2 lata temu

0

Dzięki Ci dobry człowieku, działa, już włosy wyrywałem z głowy.
Nie rozumiem, o co chodzi, bo oglądam te dwa kursy i tam podkreślają nawet, że musi być z małej litery:
16:40:
https://www.youtube.com/watch?v=cYWiDiIUxQc

oraz 6:24:
https://www.youtube.com/watch?v=juPQ04_twtA

Pozdro

PROBLEM JEST DALEJ
Teraz mam tak:

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
    password = db.Column(db.String(60), nullable=False)
    posts = db.relationship('Post', backref='author', lazy=True)

    def __repr__(self):
        return f"User('{self.username}', '{self.email}', '{self.image_file}')"

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    content = db.Column(db.Text, nullable=False)
    user_id = db.Column(db.Integer, db.ForeignKey('User.id'), nullable=False)

I błąd:

sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'post.user_id' could not find table 'User' with which to generate a foreign key to target column 'id'

Dlaczego?

edytowany 1x, ostatnio: kviatek, 2018-06-21 10:59

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0