如何在 Pony ORM 中使用 Oracle 模式名称?
How do I use Oracle schema names in Pony ORM?
这是我需要的查询:
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
是完整的 table 名称。我真正需要的是 Pony ORM 生成架构和 table 名称的组合,名称由不属于字符串的点分隔。所以以下任何一项都有效:
"SCHEMA"."LOT"
"SCHEMA".LOT
SCHEMA."LOT"
我试图通过将 _table_
定义为 'SCHEMA"."LOT'
来欺骗 Pony ORM,但它只是自动将其转换为损坏的 "SCHEMA"".""LOT"
。真气!
有什么解决办法吗?
PonyORM 这样做是因为点是一个有效的名称符号。
为了指定复合名称,您需要将 table 名称定义为字符串列表:
class Lot(db.Entity):
_table_ = ['SCHEMA', 'LOT']
lot_key = PrimaryKey(int)
lot_id = Required(str)
这是我需要的查询:
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
是完整的 table 名称。我真正需要的是 Pony ORM 生成架构和 table 名称的组合,名称由不属于字符串的点分隔。所以以下任何一项都有效:
"SCHEMA"."LOT"
"SCHEMA".LOT
SCHEMA."LOT"
我试图通过将 _table_
定义为 'SCHEMA"."LOT'
来欺骗 Pony ORM,但它只是自动将其转换为损坏的 "SCHEMA"".""LOT"
。真气!
有什么解决办法吗?
PonyORM 这样做是因为点是一个有效的名称符号。
为了指定复合名称,您需要将 table 名称定义为字符串列表:
class Lot(db.Entity):
_table_ = ['SCHEMA', 'LOT']
lot_key = PrimaryKey(int)
lot_id = Required(str)