如何解决将变量列检索列表注入SQL查询的最佳方法通过psycopg2执行
我有这样的查询:
SELECT_DATA = """select *
from schema.table tb
order by tb.created_time
"""
但是,我不想选择该表中的所有列,而是想通过Python中通过psycopg2注入提供的指定列列表进行检索。提供的列列表字符串如下所示:
'col1,col2,col3'
很简单,除了我还需要在每个列名的开头添加表别名“ tb”,所以它看起来应该像这样:
'tb.col1,tb.col2,tb.col3'
因此,查询结果为:
SELECT_DATA = """select tb.col1,tb.col3
from schema.table tb
order by tb.created_time
"""
我想的最直接的方法是将给定的字符串解析为以逗号分隔的列表,并附加“ tb”。到每个列名称的开头,然后将列表解析回一个用于注入的字符串。但这似乎很混乱并且很难遵循,所以我想知道是否有更好的方法来解决这个问题?
解决方法
在拆分逗号分隔的字符串后,请考虑对sqlIdentifiers
的列表理解:
commas_sep_str = "col1,col2,col3"
field_identifiers = [sql.Identifier(s) for s in commas_sep_str.split(',')]
query = (sql.SQL("select {fields} from {schema}.{table}")
.format(
fields=sql.SQL(',').join(field_identifiers),schema=sql.Identifier('my_schema')
table=sql.Identifier('my_table')
)
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。