我想根据随机变量从一行中获取特定值。这是一个示例表,PID列是“自动增量主键整数”,其他2列是TEXT
例如表
PID NAME PHONE
--- ---- -----
1 bill 999-9999
2 joe 888-8888
我想在表中抛出一个随机变量
randomVariable = raw_input('Enter something: ')
> 1
并让代码返回名称
>纸币
我知道我可以使用像...这样的东西。
randomVariable = raw_input('Enter something: ')
sql = ("SELECT name FROM example_table WHERE pid='%s'" % randomVariable)
result = cursor.execute(sql)
print result
>纸币
显然使用'%s'并不安全,建议使用'?'在它的位置。
randomVariable = raw_input('Enter something: ')
sql = ("SELECT name FROM example_table WHERE pid=?", randomVariable)
result = cursor.execute(sql)
print result
但这似乎对我不起作用。我结束了......
“ValueError:operation parameter必须是str或unicode”
我意识到我可以抓住所有的行并将它们放入一个变量中然后我可以迭代直到找到我正在寻找的东西,但我认为对于大型数据库而言效率不高。任何人都可以帮我指出正确的方向吗?
答案 0 :(得分:3)
我相信你打算像这样使用它
randomVariable = raw_input('Enter something: ')
sql = "SELECT name FROM example_table WHERE pid=?"
result = cursor.execute(sql, randomVariable)
print result
答案 1 :(得分:1)
验证用户输入,%s就可以了。在所有中存储行并将它们放入列表并不是一个好主意,因为行数会随着时间的推移而增长,甚至在使用时占用大量内存。为了防止 SQL注入,您可以使用诸如类型转换为int的类型来验证输入,将其放在try / except块中,这将阻止所有恶意输入,例如'OR 1 = 1- -