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