1
#necessary import goes here
engine = sqlalchemy.create_engine('mysql://root@127.0.0.1/test',echo=False)
print 'Engine created'
connection=engine.connect()
metadata=MetaData(engine)
metadata.bind=engine
Session =  sessionmaker(bind=engine)
session = Session()
mapping = Table('mapping',metadata,autoload=True)

class Mapping(object):
    pass
MappingMapper=mapper(Mapping,mapping)

これで、挿入、更新、削除、フィルターなどの基本的なクエリを作成できるようになりました。

Q:1 既存の列に基づいて新しい列を派生させる複雑なクエリを作成する必要があります。元。ColA、ColB はテーブルにあり、ColC はテーブル構造の一部ではありません。ColC > 50 の場合、ColC の順で表から (ColA+ColB) を ColC として選択します。

上記のクエリを SqlAlchemy で変換する方法がわかりません。マッピング方法、取得方法。

4

1 に答える 1

3

最も簡単な方法は、ハイブリッド アトリビュートを使用することです。あなたの場合、クラスの宣言を次のように変更するだけです。

from sqlalchemy.ext.hybrid import hybrid_property

class Mapping(object):
    @hybrid_property
    def ColC(self):
        return self.ColA + self.ColB

次に、クエリ:

qry = session.query(Mapping).filter(Mapping.ColC > 80) 

SQL を生成します。

SELECT mapping.id AS mapping_id, ...
FROM mapping
WHERE mapping."ColA" + mapping."ColB" > ?
于 2013-01-24T10:02:55.040 に答える