Flask sql 炼金术:连接两个不同类型的表

Flask sql alchemy : Join between two tables of different types

是否可以使用 uuid

连接 2 个表
session.query(TokenDebitHistory)\
.join(coupons,TokenDebitHistory.sr_no == uuid.UUID(coupons.c.trans_debit_id)`

因为我已将 sr_no 声明为 primary key 字段,该字段也是 UUID

类型

Error:

boolean value of this clause is not defined !

当您使用 join 函数时,它最终将作为 SQL 查询发送到您的数据库引擎。发送uuid.UUID(coupons.c.trans_debit_id)肯定会发送查询

但是您的 RDBMS 无法正确解释此查询。

您需要在数据库级别进行此转换(即作为SQL查询的一部分)。

为此,您应该使用 CAST 语句。在 SQL Alchemy 中,您可以使用 cast 函数。并且您应该将此列转换为您使用的数据库方言的 UUID 类型。

这是一个示例使用 PostgreSQL 方言,在您的情况下可能会有所不同。

from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy import cast

select(TokenDebitHistory) \
.join(coupons,TokenDebitHistory.sr_no == cast(coupons.c.trans_debit_id, UUID)) 

将编译到此 SQL 查询:

SELECT * FROM TokenDebitHistory 
JOIN coupons
On TokenDebitHistory.sr_no = CAST(coupons.trans_debit_id AS UUID)