Python SQLAlchemy从单个表中选择

Python SQLAlchemy从单个表中选择,python,mysql,sql,sqlalchemy,Python,Mysql,Sql,Sqlalchemy,在尝试在SQL Alchemy中复制一个MySQL查询时,我遇到了一个指定要从哪些表中选择的障碍 有效的查询是 SELECT c.* FROM attacks AS a INNER JOIN hosts h ON a.host_id = h.id INNER JOIN cities c ON h.city_id = c.id GROUP BY c.id; 我尝试使用以下函数在SQLAlchemy中实现这一点 def all_cities(): session = connectio

在尝试在SQL Alchemy中复制一个MySQL查询时,我遇到了一个指定要从哪些表中选择的障碍

有效的查询是

SELECT c.*
FROM attacks AS a INNER JOIN hosts h ON a.host_id = h.id
  INNER JOIN cities c ON h.city_id = c.id
GROUP BY c.id;
我尝试使用以下函数在SQLAlchemy中实现这一点

def all_cities():
    session = connection.globe.get_session()
    destination_city = aliased(City, name='destination_city')
    query = session.query(City). \
        select_from(Attack).\
        join((Host, Attack.host_id == Host.id)).\
        join((destination_city, Host.city_id == destination_city.id)).\
        group_by(destination_city.id)

    print query

    results = [result.serialize() for result in query]

    session.close()
    file(os.path.join(os.path.dirname(__file__), "servers.geojson"), 'a').write(geojson.feature_collection(results))
在打印查询时,我得到了几乎正确的查询

SELECT
  cities.id         AS cities_id,
  cities.country_id AS cities_country_id,
  cities.province   AS cities_province,
  cities.latitude   AS cities_latitude,
  cities.longitude  AS cities_longitude,
  cities.name       AS cities_name
FROM cities, attacks
  INNER JOIN hosts ON attacks.host_id = hosts.id
  INNER JOIN cities AS destination_city ON hosts.city_id = destination_city.id
GROUP BY destination_city.id
但是,您会注意到,它正在选择城市、攻击

如何使其仅从
攻击
表中进行选择?

此处的行:

query = session.query(City)
查询
City
表也是如此,这就是为什么您会得到如下查询:

FROM cities, attacks

如果您必须使用
city\u id
如何在不使用cities表的情况下获得它
session.query(城市)
这里您也在查询
City
表。是的,您是对的,我刚刚将它切换到query(destination\u City)并修复了它。这是有道理的。谢谢