2

这是我需要的查询:

SELECT * FROM SCHEMA.LOT

使用以下 Python 代码

class Lot(db.Entity):
    _table_ = 'SCHEMA.LOT'
    lot_key = PrimaryKey(int)
    lot_id = Required(str)

这是 Pony ORM 生成的查询:

SELECT "l"."LOT_KEY", "l"."LOT_ID"
FROM "SCHEMA.LOT" "l"

这自然会出错ORA-00942: table or view does not exist,因为 Oracle 认为这SCHEMA.LOT是完整的表名。我真正需要的是 Pony ORM 生成模式和表名的组合,表名由不属于字符串的点分隔。因此,以下任何一项都将起作用:

"SCHEMA"."LOT"
"SCHEMA".LOT
SCHEMA."LOT"

我试图通过定义_table_as来欺骗 Pony ORM 'SCHEMA"."LOT',但它只是自动将其转换为损坏的"SCHEMA"".""LOT". 真气!

有没有办法解决?

4

1 回答 1

4

PonyORM 这样做是因为点是有效的名称符号。

为了指定复合名称,您需要将表名定义为字符串列表:

class Lot(db.Entity):
    _table_ = ['SCHEMA', 'LOT']
    lot_key = PrimaryKey(int)
    lot_id = Required(str)
于 2015-07-15T07:08:55.620 回答