Как правильно подключить базы данных в SQLAlchemy.Получение NameError: имя «Пользователь» не определено - PullRequest
0 голосов
/ 01 июня 2019

Я создаю отношения многие ко многим с SQLAlchemy и флягой. Я думаю, что я сделал все операции импорта правильно, но по какой-то причине я получаю сообщение об ошибке "NameError: имя 'User' не определено".

Я прочитал документацию по SQLAlchemy и попробовал пример их объекта ассоциации. Ниже мои собственные файлы. Каждая модель базы данных находится в приложении в отдельной папке, например models.py (Picture) в папке application / pictures.

from sqlalchemy.orm import relationship

from application import db
from application.Base import Base


class Picture(Base):

    __tablename__ = "picture"

    #some code

    account_id = db.Column(db.Integer, db.ForeignKey("account.id"), nullable=False)

    likers = relationship("Likes", back_populates="likes")

    def __init__(self, name):
        self.path = name
from sqlalchemy.orm import relationship

from application import db
from application import Base


class User(Base):

    __tablename__ = "account"

    #some code

    likes = relationship("Likes", back_populates="likers")

    def __init__(self, name, username, password):
        self.name = name
        self.username = username
        self.password = password

    #code associated to login
from sqlalchemy.orm import relationship, backref

from application import db
from application import Base

class Likes(Base):

    __tablename__ = "like"  

    #some code

    account_id = db.Column(db.Integer, db.ForeignKey('account.id'),
                           nullable=False)
    picture_id = db.Column(db.Integer, db.ForeignKey('picture.id'),
                           nullable=False)


    likers = relationship(User, back_populates="likes")
    likes = relationship(Picture, back_populates="likers")


    def __init__(self, account_id, picture_id):
        self.account_id = account_id
        self.picture_id = picture_id
#I have also imported the like db to __init__.py file before db.create_all()


from application.likes import models

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

likers = relations (User.id, back_populations = "лайки") NameError: имя 'User' не определено

1 Ответ

1 голос
/ 01 июня 2019

Вы должны заключить название вашей модели в `или", когда вставка вашей модели неупорядочена. Пример:

likers = relationship('User', back_populates="likes")
likes = relationship('Picture', back_populates="likers")

Из документов (https://docs.sqlalchemy.org/en/13/orm/relationship_api.html):

При использовании декларативного расширения декларативный инициализатор позволяет передавать строковые аргументы в отношение (). Эти строковые аргументы преобразуются в вызываемые объекты, которые оценивают строку как код Python, используя декларативный реестр классов в качестве пространства имен. Это позволяет автоматически выполнять поиск связанных классов через их строковое имя и устраняет необходимость импорта связанных классов в пространство локального модуля до объявления зависимых классов. По-прежнему требуется, чтобы модули, в которых появляются эти связанные классы, были импортированы в любое место приложения в какой-то момент до фактического использования связанных отображений, иначе будет возникать ошибка поиска, когда отношение () пытается разрешить строковую ссылку на родственный класс.

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