SQLAlchemy и объединения, у нас нет внешних ключей

Предположим следующее в MySQL:

CREATE TABLE users (
  id integer auto_increment primary key,
  username varchar(30),
  active enum('N','Y'),
  created_on int(11),
  updated_on int(11),
  points int(10),
  // other fields
);

CREATE TABLE comments (
  id integer auto_increment primary key,
  user_id integer,
  forum_id integer,
  favorited integer,
  // other fields
);

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

У меня проблема с тем, чтобы осмыслить соединения SQLalchemy, когда между таблицами не установлен формальный внешний ключ.

Фактически, я хотел бы сделать что-то вроде:

SELECT 
  u.username,
  c.forum_id,
  count(c.id)
FROM 
  users u
  JOIN comments c ON u.id=c.user_id
WHERE
  u.id = 1234
GROUP BY
  u.username,
  c.forum_id;

Код, который у меня есть, включает такие вещи, как следующее:

mapper(Users, users, primary_key=[users.c.id],
    include_properties=['user_id', 'username', 'active', 'created_on',
        'updated_on', 'points'])
mapper(Comments, comments, primary_key=[comments.c.id],
    include_properties=['active', 'user_id', 'favorited', 'forum_id'])

j = join(users, comments)
mapper(UserComments, j, properties={'user_id': [users.c.id,
    comments.c.user_id]})

session = create_session()
query = session.query(UserComments).filter(users.cid == 1234)
rdata = run(query)
for row in rdata:
    print row

... конечно не работает с:

sqlalchemy.exc.ArgumentError: Can't find any foreign key relationships
between 'users' and 'comments'.

Я не уверен, как обойти это, когда у нас нет внешних ключей. Как еще я могу определить отношения? Я думал, что это часть вызова mapper ():

mapper(UserComments, j, properties={'user_id': [users.c.id, 
    comments.c.user_id]})

.. .бу По-видимому, я неправильно прочитал документацию.

Заранее благодарим за любую помощь.

8
задан iandouglas 15 June 2011 в 01:51
поделиться