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)

现在我可以为插入、更新、删除、过滤等编写基本查询。

问:1 我需要编写复杂的查询,我确实根据现有列派生新列。前任。ColA,ColB 在表上,ColC 不是表结构的一部分。从 ColC > 50 按 ColC 排序的表中选择 (ColA+ColB) 作为 ColC。

我不知道如何使用 SqlAlchemy 转换上面的查询。如何映射,如何检索。

4

1 回答 1

3

最简单的是使用Hybrid Attributes。在您的情况下,只需将类的声明更改为以下内容:

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 回答