Sqlalchemy中的替换子句可选

时间:2017-04-05 16:16:55

标签: sql sqlalchemy

我想替换现有SqlAlchemy Selectable对象中的一个子句。具体来说,我有一个应该在Postgres数据库上运行的查询,该数据库在JSON列上运行:

sa.select([t.c.col1]).where(sa.func.json_extract_path_text(t.c.col1, 'name') == 'test'))

为了进行测试,我有一个不支持json_extract_path_text函数的内存中Sqlite数据库,所以我想用类似的函数替换WHERE子句,而不是字符串操作。

由于我无法更改我在测试函数中收到的生产查询,因此我想在创建后替换该子句。是否有API来获取selectable的语法树?

1 个答案:

答案 0 :(得分:0)

我实施了Ilya的建议并实现了我自己的json_extract_path_text函数,并使用Sqlite的create_function将其放入数据库中:

conn = self.engine.connect()
conn.connection.create_function('json_extract_path_text', -1, json_extract_path_text)