Невозможно создать пользователя в базе данных: sqlalchemy.exc.InvalidRequestError - PullRequest
0 голосов
/ 26 сентября 2019

Я пытаюсь добавить пользователя в файл базы данных, но при попытке создать объект User я получаю следующую ошибку:

sqlalchemy.exc.InvalidRequestError: One or more mappers failed to initialize - can't proceed with initialization of other mappers. Triggering mapper: 'mapped class Patient->patient'. Original exception was: Could not determine join condition between parent/child tables on relationship Patient.documents - there are no foreign keys linking these tables.  Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or specify a 'primaryjoin' expression.
from flask import Flask, render_template, flash
from flask_sqlalchemy import SQLAlchemy
from forms import LoginForm

app = Flask(__name__)
app.config['SECRET_KEY'] = 'SECRETKEY'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///storage.db'
db = SQLAlchemy(app)

"""
Users
"""
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String)
    username = db.Column(db.String, unique=True, nullable=False)
    password = db.Column(db.String, nullable=False)
    mail = db.Column(db.String, default='test@mail')
    role = db.Column(db.Integer)

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


"""
Patients
"""
class Patient(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    prename = db.Column(db.String, nullable=False)
    name = db.Column(db.String, nullable=False)
    mail = db.Column(db.String, default='test@mail')
    birthdate = db.Column(db.String, nullable=False)
    documents = db.relationship('Doc', backref='patient', lazy=True)

    def __repr__(self):
        return f"Patient('{self.prename}', '{self.name}')"


"""
Documents
"""
class Doc(db.Model):
    from datetime import datetime

    pdfid = db.Column(db.Integer, primary_key=True)
    path = db.Column(db.String)
    created = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
    deletetime = db.Column(db.Integer, nullable=False)
    patientid = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)

    def __repr__(self):
        return f"Docs('{self.path}', '{self.created}')"

Мои шаги в терминале Python (файлвызываемый индекс):

  1. из индекса импорта db
  2. db.create_all ()
  3. из индекса импорта Пользователь, Док, пациент
  4. пользователь1 =Пользователь (имя = «Тестовый пользователь», имя пользователя = «тест», пароль = «тестовый тест», роль = 1)
  5. При попытке выполнить шаг 4 я получаю описанную выше ошибку.

Я не вижу никаких проблем в моем коде, поэтому я был бы признателен за любую помощь:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...