Python通过for循环将字符串参数传递到sqlexecu

2024-04-26 14:13:07 发布

您现在位置:Python中文网/ 问答频道 /正文

试图弄清楚如何将循环中的每个字符串传递到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.  

Tags: 文件代码inforsql国家excelcountry
3条回答

比包括引号更好的是避免显式的字符串格式。而是将参数作为execute中的第二个参数传递。Psycopg2会帮你处理的。 这将使您避免潜在的代码注入和错误,如遗漏引号

cursor.execute("SELECT * from TABLE WHERE COUNTRY = %s" , ('USA',))

{a1}

字符串文字应包括单引号,即:

SQL = "SELECT * from TABLE WHERE COUNTRY = '%s'" % country

在SQL中,字符串需要用引号'括起来。在您的查询中,%s不会被替换后的内容包围。在

现在,您的查询看起来像SELECT * from TABLE WHERE COUNTRY = PERU,而您的查询是SELECT * from TABLE WHERE COUNTRY = 'PERU'。只需用引号将%s括起来。在

(如果您的查询给您带来错误,通常在替换之后打印最终查询,以查看它是否是有效的SQL)

相关问题 更多 >