我想替换现有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
的语法树?
答案 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)