gpt4 book ai didi

python - 用于创建查询的 psycopg2 变量格式

转载 作者:太空狗 更新时间:2023-10-30 00:55:28 26 4
gpt4 key购买 nike

这不是那么相关,所以我只是对以下内容(Python 2.7)感到好奇:

我刚开始使用 psycopg 并通读文档,他们总是使用字符串 (%s) 和元组将值传递给查询。

The variables placeholder must always be a %s

所以考虑下面的例子-

在名为“test”且字段为 value_1 (varchar) 和 value_2 (int) 的表中,查询创建为:

value_1 = "test"
value_2 = "100"
cur.execute("INSERT INTO test (value_1,value_2) VALUES (%s,%s)",\
(value_1,value_2))

我的问题是,使用“格式化”方法(如下所示)是否是一种不好的做法,甚至是有问题的:

cur.execute("INSERT INTO test (value_1,value_2) VALUES ('{value1}',{value2})".\
format(value1=value_1,value2=value_2))

根据您的经验,您怎么说,这真的很危险或有问题吗?

最佳答案

电话

cur.execute("INSERT INTO test (value_1,value_2) VALUES (%s,%s)",\
(value_1,value_2))

有一个字符串参数和一个附加参数,它是用于替换的值的元组。这让 psycopg2 可以插入值,并且这样做比简单的字符串插入更安全。

usage docs for psycopg2

♯ Pass data to fill a query placeholders and let Psycopg perform

♯ the correct conversion (no more SQL injections!)

>>> cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", ... (100, "abc'def"))

通话中

cur.execute("INSERT INTO test (value_1,value_2) VALUES ('{value1}',{value2})".\
format(value1=value_1,value2=value_2))

自己插值,并将结果字符串传递给游标执行方法。

简单插值容易受到 SQL 注入(inject)。您最好使用第一种形式。

您应该始终考虑 "Little Bobby Tables" .

关于python - 用于创建查询的 psycopg2 变量格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28120124/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com