Python通过for循环将parameter passing给sql execute
试图找出如何将每个string从我的循环传递到SQL来遍历每个国家,并创build一个特定于每个国家(每个有自己的国家数据的5个Excel文件)的Excel文件。 我发现有一个.join和IN()语句可以工作,但是把所有5个国家放在所有5个文件中的代码。
码:
import CX_Oracle Import xlwt country_list = ['PERU','GUATEMALA','BAHAMAS','BARBADOS'] for country in country_list: SQL = "SELECT * from TABLE WHERE COUNTRY = %s" % country cursor = con.cursor() cursor.execute(SQL) book = xlwt.Workbook() sheet1 = book.add_sheet('Summary') for i, row in enumerate(cursor): for j, col in enumerate(row): sheet1.write(i+1,j,col) #Starts pasting the data at row 2 book.save('Output_' + country + '.xls') Error "PERU" Invalid character.
在SQL中,string需要用引号括起来。 在你的查询中, %s
不会被replace后的那些包围。
现在,你的查询看起来像SELECT * from TABLE WHERE COUNTRY = PERU
,而你SELECT * from TABLE WHERE COUNTRY = 'PERU'
。 只需用引号包围%s
。
(如果你的查询给你提供了错误,通常在replace之后打印最终查询是很有用的,看看它是否是有效的SQL。)
甚至比包括引号更好避免明确的string格式。 而是在执行中传递参数作为第二个参数。 Psycopg2将为您处理。 这样可以避免潜在的代码注入以及错误报价等错误
cursor.execute("SELECT * from TABLE WHERE COUNTRY = %s" , ('USA',))
你应该包括string文字的单引号,即:
SQL = "SELECT * from TABLE WHERE COUNTRY = '%s'" % country