Mysql:查询集在python中不起作用

Mysql:查询集在python中不起作用,python,mysql,Python,Mysql,我现在正在使用python mysql 我这里有一个问题是mysql查询 query = 'SELECT * FROM callerdetail WHERE screenname="1" AND status="0"AND agent ='idd' 我从外部源获取idd,但每当我尝试执行此查询时 我犯了一个错误 File "server.py", line 28 query = 'SELECT * FROM callerdetail WHERE screenname="1" AND

我现在正在使用python mysql

我这里有一个问题是mysql查询

query = 'SELECT * FROM callerdetail WHERE screenname="1" AND status="0"AND agent ='idd'
我从外部源获取idd,但每当我尝试执行此查询时

我犯了一个错误

  File "server.py", line 28
    query = 'SELECT * FROM callerdetail WHERE screenname="1" AND status="0"AND agent ='idd'
                                                                                         ^
SyntaxError: invalid syntax

请帮助我找出我可能做错的地方

您需要使用查询参数:

query = 'SELECT * FROM callerdetail WHERE screenname="1" AND status="0"AND agent =?'
然后在执行查询时传入
idd
的值:

cursor.execute(query, (idd,))
在python中,您不能简单地将变量放在各种字符串之间,并希望它进行插值

要执行常规字符串插值,请使用:


但是,您将错过准备语句的数据库查询优化器。如果重复使用,准备好的语句执行起来会更快。

您正在混合使用双引号和单引号

而不是

query = 'SELECT * FROM callerdetail WHERE screenname="1" AND status="0"AND agent = 'idd'
使用

query = 'SELECT * FROM callerdetail WHERE screenname="1" AND status="0"AND agent = "idd"'
另外,idd是一个变量吗?如果是你需要做的

query = 'SELECT * FROM callerdetail WHERE screenname="1" AND status="0"AND agent = "'+str(idd)+'"'

在进行查询时,您似乎忘记了连接外部变量

query = 'SELECT * FROM callerdetail WHERE screenname="1" AND status="0"AND agent = "'+idd+'"'

我的答案实际上是两个答案:D我不确定idd是一个变量还是代理的实际SQL值,所以我提出了第二个答案,将idd转换为字符串进行连接。因此,对于有多个变量的更复杂查询,您只需将变量添加到元组中即可?@raido:我仍然会使用多个
查询参数,并使用
.execute(query,tuple\u of_parameters)
调用中的那些值。啊,我明白了,所以它按顺序从tuple中提取?那么第一个呢?是否需要元组[0]和第二个?将使用元组[1]?请注意,不同的数据库适配器使用不同的参数样式,请参阅和我链接到
.format()
函数的文档,是的,
{0}、{1}、{2}
将引用
.format()
函数的位置参数进行插值。
query = 'SELECT * FROM callerdetail WHERE screenname="1" AND status="0"AND agent = "'+idd+'"'