2017-08-22 1 views
3

SQL AlchemyでMySQLクエリを複製しようとする中で、どのテーブルを選択するかを突き止めました。SQLAlchemy select_from単一のテーブル

作品クエリは、私は、クエリを印刷するとき、私はほとんど右のクエリ

で終わる

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)) 

次の関数を使用して、SQLAlchemyの中でこれを実現しようと

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; 

です

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 

ただし、cities, attacksから選択していることに注意してください...

attacksテーブルからのみ選択するにはどうすればよいですか?

+0

としてクエリを得ている理由ですまたCityテーブルを照会しています都市表。 'session.query(City)'ここでは 'City'テーブルにも問い合わせています。 – 0decimal0

+1

うん、あなたはそうだった、私はちょうどそれを照会(destination_city)に切り替え、それを修正した。それは理にかなっている。ありがとう! –

答えて

1

ここライン:

query = session.query(City) 

は、あなたが使用しなくても、あなたはそれを得ることができますどのように `city_id`を使用する必要がある場合は、

FROM cities, attacks 
関連する問題