试图弄清楚如何将循环中的每个字符串传递到SQL中,以循环遍历每个国家,并创建一个特定于每个国家的excel文件(5个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.
比包括引号更好的是避免显式的字符串格式。而是将参数作为execute中的第二个参数传递。Psycopg2会帮你处理的。 这将使您避免潜在的代码注入和错误,如遗漏引号
{a1}
字符串文字应包括单引号,即:
在SQL中,字符串需要用引号
'
括起来。在您的查询中,%s
不会被替换后的内容包围。在现在,您的查询看起来像
SELECT * from TABLE WHERE COUNTRY = PERU
,而您的查询是SELECT * from TABLE WHERE COUNTRY = 'PERU'
。只需用引号将%s
括起来。在(如果您的查询给您带来错误,通常在替换之后打印最终查询,以查看它是否是有效的SQL)
相关问题 更多 >
编程相关推荐