python - SQLAlchemy select_from 单个表

标签 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 = 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

但是,您会注意到它正在从cities, attacks...中选择

我怎样才能让它只从 attacks 表中选择?

最佳答案

这里的行:

query = session.query(City)

正在查询 City 表,这也是您将查询作为

的原因
FROM cities, attacks

关于python - SQLAlchemy select_from 单个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45822028/

相关文章:

python - 使用 Tornado httpclient 对 Github API 的简单未授权请求返回 Forbidden

php - MongoDB GridFS 存储多种尺寸的图像或即时调整大小

SQL Server 查询性能 : Nested cursors

SQL 查询在每列中返回相同的值

子查询返回null时的mysql

Python Pandas 合并导致内存溢出

python - 将 var 传递给 Python 单元测试 TestCase 和/或 TestSuite 的正确方法是什么?

python - 存储和使用自己的状态代码的大多数 pythonic 方式

PHP/MySQL - 使用内连接从记录集中丢失值

c# - 让 EntityFramework 尊重 mysql max_user_connections