2017-04-05 45 views
0

我想替换现有的SqlAlchemy Selectable对象中的一个子句。具体而言,我有一个应该是一个JSON列运行的Postgres数据库上运行一个查询:替换子句可选择Sqlalchemy

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的语法树?

+2

这是非常为什么要测试对他们在生产中使用相同的数据库产品的原因。你有没有考虑[嘲笑缺少的功能](https://docs.python.org/3/library/sqlite3.html#sqlite3.Connection.create_function)在sqlite而不是取代呼叫? –

+0

谢谢!如果你把你的评论作为答案,我会接受它。 – user1742188

回答

0

我实现了伊利亚的建议,并实现我自己的json_extract_path_text功能和使用SQLite的的create_function把它在DB:

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