モデルを任意のテーブルにマッピングすることに関するドキュメントからコードを複製しようとしましたが、次のエラーが発生します。
sqlalchemy.exc.InvalidRequestError: When mapping against a select() construct, map against an alias() of the construct instead.This because several databases don't allow a SELECT from a subquery that does not have an alias.
これが私がコード例を実装した方法です。
from sqlalchemy import (
select, func,
Table, Column,
Integer, ForeignKey,
MetaData,
)
from sqlalchemy.ext.declarative import declarative_base
metadata = MetaData()
Base = declarative_base()
customers = Table('customer', metadata,
Column('id', Integer, primary_key=True),
)
orders = Table('order', metadata,
Column('id', Integer, primary_key=True),
Column('price', Integer),
Column('customer_id', Integer, ForeignKey('customer.id')),
)
subq = select([
func.count(orders.c.id).label('order_count'),
func.max(orders.c.price).label('highest_order'),
orders.c.customer_id
]).group_by(orders.c.customer_id).alias()
customer_select = select([customers,subq]).\
where(customers.c.id==subq.c.customer_id)
class Customer(Base):
__table__ = customer_select
私は以下を使用してこの作品を作ることができます:
class Customer(Base):
__table__ = customer_select.alias()
残念ながら、それは副選択ですべてのクエリを作成しますが、これは非常に遅いです。
モデルを任意の選択に対してマップする方法はありますか?これはドキュメントエラーですか?ドキュメントのコードサンプルは私には機能しません(sqlalchemy == 0.8.0b2または0.7.10)