Python,SQL:将列设置为param

2024-09-27 21:30:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个SQL查询,在Python中使用Psycopg2。查询从arches表中读取一些列:

rows = archesDB.read_all("""SELECT "+str(columns)[1:-1].replace("'","")+" 
                           FROM arches 
                           WHERE lower(arch) like '%%%s%%'""" % (arch.lower()))

我想将这个查询参数化,这样它就不会使用字符串连接来指定所需的列,而是作为参数——一种更优雅的方式。在

天真的方法是SELECT *,过滤掉我需要的列。但这会给数据库和网络带来不必要的数据负担,所以我宁愿避免它。在

有什么想法吗?在

亚当


Tags: columnsfromreadsql参数allselectlower
2条回答

列名不能作为DB API中的参数传递到SQL字符串中。这对它也没有意义。在

如果需要检查列名输入,请事先对其进行清理。在

不过,like字符串应该作为参数输入

如果columns变量包含列名的字符串列表,则以下代码示例将是一个改进:

rows = archesDB.read_all("""SELECT %s 
                       FROM arches 
                       WHERE lower(arch) like %%s""" % (",".join(columns),),
                       ("%%%s%%" % (arch.lower(),),))

首先,列名插入第一个替换(%s),最后一个%%s转换为%s。 然后(“%%%s%%”%”%(下拱门(),),)生成包含%string\u content%的字符串。 最后,db-api从%string\u-content%转义,并在其中添加引号,最后进行查询。在

不能参数化元数据。创建某个标识符到所需字段列表的映射,并使用该映射。在

相关问题 更多 >

    热门问题