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)
是否可以使用 uuid
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)