#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不是表格结构的一部分。 从表格中选择(ColA + ColB)作为ColC,其中ColC>由ColC命令。
我无法如何使用SqlAlchemy转换上面的查询。如何映射,如何检索。
答案 0 :(得分: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" > ?