将python变量传递给sql
我有一个python脚本,我想从数据库中将数据提取到列表中,然后打印出来 代码如下:将python变量传递给sql,python,python-3.x,sqlite,Python,Python 3.x,Sqlite,我有一个python脚本,我想从数据库中将数据提取到列表中,然后打印出来 代码如下: sql = "SELECT * FROM example WHERE column1 == 'string_value' AND column2 = float_value AND column3 == 'string_value'" # Assemble list. query = [] for row in c.execute(sql): query.append(row) 这个很好。当我调试时
sql = "SELECT * FROM example WHERE column1 == 'string_value' AND column2 = float_value AND column3 == 'string_value'"
# Assemble list.
query = []
for row in c.execute(sql):
query.append(row)
这个很好。当我调试时,我看到sql是一个字符串,循环运行良好并组装列表。但是,当我尝试使用以下字符串格式为sql查询列值使用变量时:
sql = "SELECT * FROM example WHERE column1 = %s AND column2 = %s AND column3 = %s ",(var1_str, var2_float, var3_str)
我得到一个:
for row in c.execute(sql):
ValueError: operation parameter must be str
我无法运行循环来组装列表。调试这个我看到的“sql”现在是元组而不是字符串。为什么?
有没有比我现在使用的更好的方法呢。这是我第一次尝试SQL和Python,所以我对这方面还不熟悉
谢谢你的建议
"AND column3 = %s ",(var1_str, var2_float, var3_str)
字符串格式要求使用百分号
"AND column3 = %s " % (var1_str, var2_float, var3_str)
我并不允许在形成sql查询时使用字符串格式。如果这些值中的任何一个来自不受信任的源,那么您将面临SQL注入攻击。检查DB接口的文档,看看它是否有一种更安全的方法来包含参数
ValueError:操作参数必须为str
发生的情况是sql
变量是一个元组,但是execute()
希望看到一个字符串作为第一个位置参数。您的意思是通过将查询参数分别传递给execute()
来参数化查询:
sql = "SELECT * FROM example WHERE column1 = %s AND column2 = %s AND column3 = %s "
c.execute(sql, (var1_str, var2_float, var3_str))
for row in c.fetchall():
query.append(row)
谢谢,这很好用。。。而且更干净。确实正确。我的语法错了。但是,由于代码的其余部分,我仍然得到了一个错误,上面的解决方案确实通过使用“fetchall()”方法提供了解决方案。谢谢你的帮助。