Python SQL 根据特定变量字段选择行
我想从一行中获取一个特定的值,这个值是基于一个随机变量的。这里有一个示例表格,PID列是一个“自动递增的主键整数”,其他两列是文本。
示例表格
PID NAME PHONE
--- ---- -----
1 bill 999-9999
2 joe 888-8888
我想把一个随机变量放到表格里。
randomVariable = raw_input('输入一些内容: ')
> 1
然后代码应该返回名字。
> bill
我知道我可以用类似这样的方式...
randomVariable = raw_input('Enter something: ')
sql = ("SELECT name FROM example_table WHERE pid='%s'" % randomVariable)
result = cursor.execute(sql)
print result
> bill
显然,使用'%s'并不安全,建议用'?'来代替。
randomVariable = raw_input('Enter something: ')
sql = ("SELECT name FROM example_table WHERE pid=?", randomVariable)
result = cursor.execute(sql)
print result
但是这对我来说似乎不太管用。我最后得到的是...
"ValueError: operation parameter must be str or unicode"
我意识到我可以把所有的行都抓取到一个变量里,然后遍历这些行直到找到我想要的,但我觉得这样在处理大型数据库时效率不高。有没有人能帮我指个方向?
2 个回答
1
验证用户输入是很重要的,%s 这样是可以的。但是,把你的数据行存储起来并放进一个列表里并不是个好主意,因为随着时间的推移,数据行的数量会增加,这样会占用大量内存,即使这些数据并没有被使用。为了防止SQL注入攻击,你可以通过将输入转换成整数来验证输入,并把这个过程放在一个尝试/异常的代码块里,这样就能阻止所有恶意输入,比如 ' OR 1=1--。
3
我觉得你应该这样使用它
randomVariable = raw_input('Enter something: ')
sql = "SELECT name FROM example_table WHERE pid=?"
result = cursor.execute(sql, randomVariable)
print result