Предположим, у меня есть таблица "узлов", где я храню дерево.Каждый узел имеет идентификатор первичного ключа и столбец parent_id.Конечно, я хочу получить доступ к родительскому атрибуту каждого экземпляра узла, то есть к связи.Можно попробовать:
import sqlalchemy, sqlalchemy.orm, sqlalchemy.ext.declarative
engine = sqlalchemy.create_engine('sqlite:///PATHTOMYDATABASE', echo=True)
Base = sqlalchemy.ext.declarative.declarative_base()
class Node(Base):
__tablename__ = "nodes"
id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True)
parent_id = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey("nodes.id"))
parent = sqlalchemy.orm.relationship("Node", backref=sqlalchemy.orm.backref("childs"))
Base.metadata.create_all(engine)
Но когда я это делаю, я получаю ошибку:
sqlalchemy.exc.InvalidRequestError: Table 'nodes' is already defined for this MetaData instance. Specify 'useexisting=True' to redefine options and columns on an existing Table object.
Я не понимаю, в какой момент я мог установитьэтот вариант 'useexisting=True'
.Это правильный путь?
РЕДАКТИРОВАТЬ: На самом деле, ошибка происходит косвенно из другой части исходного сценария.Если один из них заменяет путь к временной базе данных :memory:
, он работает без проблем.Благодаря TokenMacGuy.
Так что приведенный выше пример можно рассматривать как рабочий пример.