Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python: Web
Войти
Регистрация
Восстановить пароль
 
moskitos80
64 / 64 / 30
Регистрация: 04.10.2011
Сообщений: 232
Завершенные тесты: 1
#1

Sqlalchemy.exc.ArgumentError: Error creating backref on relationship property of that name exists on mapper - Python

11.03.2016, 15:43. Просмотров 461. Ответов 0
Метки нет (Все метки)

Всем привет.
Столкнулся с такой проблемой. Мне надо реализовать отношение многие-ко-многим в рамках одной таблицы. Используется SQLAlchemy. Есть пара таблиц:

users:
id (PK)
name

users_friendship:
parent_id (FK к users.id)
child_id (FK к users.id)

В общем данная схема определяется в коде:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
...
class User(Base):
    __tablename__ = 'users'
 
    id = Column(Integer(), primary_key=True)
    name = Column(String(255))
 
class Friendship(Base):
    __tablename__ = 'users_friendship'
 
    parent_id = Column(Integer(), ForeignKey('users.id'), primary_key=True)
    child_id = Column(Integer(), ForeignKey('users.id'), primary_key=True)
 
Base.metadata.create_all()
Все вроде ничего, но вот если попробовать "отразить" схему БД в код, например в другом приложении, таким образом:

Python
1
2
3
4
5
6
7
8
9
from sqlalchemy.ext.automap import automap_base
...
AutoBase = automap_base()
AutoBase.prepare(reflect=True)
 
u = AutoBase.classes.users(
    name='vasya',
    email='vasya'
)
То именно в строке AutoBase.classes.users - возникает ошибка:
sqlalchemy.exc.ArgumentError: Error creating backref 'users_collection' on relationship 'users.users_collection': property of that name exists on mapper 'Mapper|users|users'
Я понимаю, что причина в том что оба поля (users_friendship.parent_id и users_friendship.child_id) имеют ключи к одному и тому же полю
и что маппер при построении backref-а сущности спотыкается при повторном создании существующего св-ва users.users_collection, но я не могу никак найти решение. Я знаю что можно задать имя формируемого св-ва если настроить маппер в этом месте:

Python
1
2
3
4
5
6
...
def name_for_collection_relationship(base, local_cls, referred_cls, constraint):
    return referred_cls.__name__.lower() + "_collection" # Дефолтная реализация
 
AutoBase.prepare(reflect=True, name_for_collection_relationship=name_for_collection_relationship)
...
Но даже так я пока не могу решить проблему. Подскажите кто сталкивался.

ЗЫ:
Про remote_side я в курсе. Мне нужно по-возможности иметь код такой, как показан.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.03.2016, 15:43
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Sqlalchemy.exc.ArgumentError: Error creating backref on relationship property of that name exists on mapper (Python):

ArgumentError: Error #2108: Сцена [object Scene] не найдена
Версия Flash CS6 package { import flash.display.MovieClip; import...

Maven-shade-plugin (Error creating shaded jar: error in opening zip file)
Доброго времени суток! Помогите, пожалуйста, понять в чем может быть причина...

Error 6035: The relationship has columns that are not part of the key of the table on the primary side of the rel
Приятного времени суток, форумчане. Error 6035: The relationship has...

Error creating cursor handle
Выскакивает ошибка при переносе данных из 1 таблицы во вторую(Error creating...

Error creating cursor handle
После добавления новой записи получаю сообщение 'Error creating cursor handle'....

Error creating bean with name 'resourceHandlerMapping'
Доброго времени суток, столкнулся с такой вот ошибкой, не знаю что делать,...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2016, 15:43
Привет! Вот еще темы с решениями:

Error Creating Product Object
Всем доброго времени суток! Такая вот штука произошла... уже довольно...

error creating form: 'vcl60.bpl'.
Добрый вечер! Сидел делал курсовик, и вот вроде бы сделал, все сохранил,...

Макрос выдает compile error: Sub, Function, or Property not defined (Error 35)
Написал макрос на VBA в Excel. На функции Find (см. текст ниже) макрос выдает...

Spring + Hibernate | Error creating bean with name 'sessionFactory'
Относительно недавно начал изучение Java. При создании веб-приложения при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru