python - SQLAlchemy 中的右外连接

标签 python sql sqlalchemy

我有两个表 beardmoustache 定义如下:

+--------+---------+------------+-------------+
| person | beardID | beardStyle | beardLength |
+--------+---------+------------+-------------+

+--------+-------------+----------------+
| person | moustacheID | moustacheStyle |
+--------+-------------+----------------+

我在 PostgreSQL 中创建了一个 SQL 查询,它将合并这两个表并生成以下结果:

+--------+---------+------------+-------------+-------------+----------------+
| person | beardID | beardStyle | beardLength | moustacheID | moustacheStyle |
+--------+---------+------------+-------------+-------------+----------------+
| bob    | 1       | rasputin   | 1           |             |                |
+--------+---------+------------+-------------+-------------+----------------+
| bob    | 2       | samson     | 12          |             |                |
+--------+---------+------------+-------------+-------------+----------------+
| bob    |         |            |             | 1           | fu manchu      |
+--------+---------+------------+-------------+-------------+----------------+

查询:

SELECT * FROM beards LEFT OUTER JOIN mustaches ON (false) WHERE  person = "bob"
UNION ALL
SELECT * FROM beards b RIGHT OUTER JOIN mustaches ON (false) WHERE  person = "bob"

但是我无法创建它的 SQLAlchemy 表示。我尝试了从实现 from_statementouterjoin 的几种方法,但都没有真正奏效。谁能帮我解决这个问题?

最佳答案

在 SQL 中,A RIGHT OUTER JOIN B 等同于 B LEFT OUTER JOIN A。因此,从技术上讲,RIGHT OUTER JOIN API 中没有必要 - 可以通过切换目标“可选”和加入“可选”的位置来实现相同的目的。 SQL Alchemy 为此提供了一个 API:

# this **fictional** API:
query(A).join(B, right_outer_join=True)  # right_outer_join doesn't exist in SQLA!

# can be implemented in SQLA like this:
query(A).select_entity_from(B).join(A, isouter=True)

参见 SQLA Query.join() doc ,部分“控制加入的内容”

关于python - SQLAlchemy 中的右外连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11400307/

相关文章:

java - 当发生约束违反异常时

当连续条件为真时MySQL计算值

python - 过滤 SQLAlchemy 关系

python - 给定单词和频率对的字典,如何在 scikit 中进行文本挖掘

python - 将欧元转换为欧分时有时会丢失一美分

python - 在Python中通过UDP发送CAN帧

Python - 列出函数值的组合对

java - HSQLDB:使用 java 插入/获取日期

python - 数据库连接: with closing() vs __del__

python - 使用 sqlalchemy 查询连接表