Предположим следующее в 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]})
.. .бу По-видимому, я неправильно прочитал документацию.
Заранее благодарим за любую помощь.