Python SQL 根据特定变量字段选择行

1 投票
2 回答
18297 浏览
提问于 2025-04-16 10:35

我想从一行中获取一个特定的值,这个值是基于一个随机变量的。这里有一个示例表格,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

撰写回答