へ:SqlAlchemy Python。 MySQLからの私はSQLAlchemyの隣にMySQLのコードを変換するにはどうすればよいSQLAlchemyの
SELECT
u.id AS writer_id,
u.user_login AS user_login,
m.message_id AS message_id,
m.message,
m.time
FROM
(SELECT
message_id, tm.writer_id, tm.receiver_id, message, time
FROM
test_messages tm
WHERE
(tm.writer_id = 1 AND tm.receiver_id = 2)
OR (tm.writer_id = 2 AND tm.receiver_id = 1)
ORDER BY tm.time DESC
LIMIT 10 OFFSET 0) AS m
LEFT JOIN
users u ON u.id = m.writer_id
ORDER BY (m.time);
私は次の試みた:
s = select([
users.c.id,
users.c.user_login,
messages.c.message_id,
messages.c.message,
messages.c.time
]).select_from(
select([
messages.c.message_id,
messages.c.writer_id,
messages.c.receiver_id,
messages.c.message,
messages.c.time
]).where(
or_(
and_(
messages.c.writer_id == writer_id,
messages.c.receiver_id == receiver_id
),
and_(
messages.c.writer_id == receiver_id,
messages.c.receiver_id == writer_id
)
)
).select_from(
users.outerjoin(messages, users.c.id == messages.c.writer_id)
).order_by(messages.c.time.desc())
).order_by(messages.c.time)
response = await conn.execute(s)
headers = response.keys()
rows = await response.fetchall()
はエイリアスの問題を持ちます。
pymysql.err.InternalError: (1248, 'Every derived table must have its own alias')
サブクエリ全体を書きましたが、エイリアスに問題があります。明示的にエイリアスを設定すべきか、何をすべきですか? お願いします。あなたと同等のクエリを形成することができるCore and the SQL Expression Languageを使用して
あなたは通常、そのような 'Query'をインスタンス化するのではなく、セッションの' query'プロパティを通して、あるいは 'select()'のようなCore構造体を使用します。チュートリアル(http://docs.sqlalchemy.org/en/latest/orm/tutorial.htmlおよびhttp://docs.sqlalchemy.org/en/latest/core/tutorial.html)を読むことをお勧めします。あなたのクエリ構造では、あなたが参加を誤ってしまったようです。元のSQLはサブクエリから選択し、ユーザーと結合しました。現在のSQLA構文がサブクエリに結合されます。 –
@IljaEveriläはい、でもサブクエリを使ってクエリを書く方法はわかりません。そして参加する。 –
そのため、チュートリアルを読む必要があります。特に[subqueries](http://docs.sqlalchemy.org/ja/latest/orm/tutorial.html#using-subqueries)を扱う部分。 –