cur=connection.cursor()
def fillDoctors(key_bodyloc,proportion):
bodyloc_specialty_query="select distinct Speciality from body_speciality where body_location in (%s) "
#cur.execute(bodyloc_specialty_query)
data1=([key_bodyloc])
#print(bodyloc_specialty_query,data)
cur.execute(bodyloc_specialty_query,data1)
results=cur.fetchall()
specialities=[x[0] for x in results]
condition=""
for speciality in specialities:
print(str(speciality))
condition=condition+"'%"+speciality+"%'"+" or Speciality like "
#print(speciality)
#print(condition)
specialty_doctors_query="select DoctorName,Speciality,ClinicName from Doctors where Speciality like %s limit %s"
data2=([condition,proportion])
print(specialty_doctors_query,data2)
cur.execute(specialty_doctors_query,data2)
final=cur.fetchall()
print(final)
行final=cur.fetchall()
在每次迭代中返回一个空元组。我已经验证表Doctors不是空的,并且当'条件'被硬编码时代码工作正常。该代码应该打印每个专业的医生详细信息。谁能告诉我为什么会这样?
答案 0 :(得分:0)
在我打电话给data1
时,您似乎没有正确地将bodyloc_specialty_query
传递给cur.execute(bodyloc_specialty_query,data1)
,这会导致问题。
Python中字符串注入的语法如下:
str1 = "some string %s" % "other string"
使用Pythons format
内置函数代替这种向字符串添加字符串的方式:
str1 = "some string {str2}".format(str2="other_string").
但请确保您的str2
是字符串或可转换为字符串。
我可以看到您的data1
是list
,而不是str
。您应该先将其转换为str
。祝你好运。
答案 1 :(得分:0)
将参数传递给execute方法的重点是它们被转义。因此,您的条件被视为单个字符串,而不是SQL连接的一系列参数。此外,您不能使用LIMIT值的参数。
您需要通过插值构建一些SQL和占位符,然后只传递值。
like = "speciality LIKE %%%s%%"
condition = like + (" OR {}".format(like)) * len(specialities)
query = "select DoctorName,Speciality,ClinicName from Doctors where {} LIMIT {}".format(condition, proportion)
cursor.execute(query, specialities)
专业专业: condition = condition +“'%”+ special +“%'”+“或者像”
这样的专业