Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да създадете връзка много към много в SQLAlchemy (python, flask) за модел Потребител към себе си

Моделът, който се опитвате да приложите, е специален случай на връзка много към много. SQLAlchemy нарича това Adjacency List Relationship и препоръчвам да опитате да следвате кода там:

http://docs.sqlalchemy.org/en /rel_0_9/orm/relationships.html#adjacency-list-relationships

Ключът е 'remote_side' kwarg там.

Ето защо:грешката, която получавате, е защото вашата таблица за асоцииране („приятели“) има два външни ключа, сочещи към таблицата „потребители“:един в колона „user_id“ и един в колона „friend_id“. SQLAlchemy се опитва да открие автоматично връзки въз основа на външни ключове, но не успява, защото не може да каже в каква посока върви връзката. Така че, ако имате запис в таблицата 'приятели' като така

user_id   : 1
friend_id : 2

SQLAlchemy не може да разбере дали user_1 има user_2 за приятел или обратното.

Ако това изглежда объркващо, така е. Приятелството в смисъла на социалните мрежи може да бъде необективно , в който случай user_1 има приятел user_2 не означава, че user_2 има user_1 като приятел; или може да бъде биективно , в който случай двете са еквивалентни. Тук показвам възрастта си, но първото е представено от Livejournal, докато второто е представено от Facebook.

Не знам от върха на главата си как да внедря неактивна връзка в SQLAlchemy. Това е грозен UNION ALL или нещо подобно в MySQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Свързване на Ms Access Db към Mysql чрез Vba

  2. Обектът не може да бъде преобразуван в низ в MySQLi PHP

  3. Избиране на последния запис от INNER JOIN и групиране

  4. Вмъкване на множество стойности в една клетка на MYSQL

  5. Пропуски и острови на 2 колони - ако колона A е последователна и колона B са идентични