首页 > 解决方案 > 如何使用python在插入语句中转义单引号

问题描述

我正在尝试在 aws 胶水作业中使用 python 将数据插入红移表中。我的测试表中的某些列(从 csv 加载)有单引号(如 Carl's),当我运行脚本时,插入语句准备为 Insert into Details 值('1','Mark Jason','Carl's ', 'NY') 并且代码无法检测到额外的 s。

我尝试使用参数化语句,但无法获得正确的结果。请帮助我在哪里出错。

import pg8000
from datetime import datetime
conn = pg8000.connect(user = 'xxx', password = 'xx', host = 'xxx.redshift.amazonaws.com',  port = 5000, database = 'xx')
cursor = conn.cursor()

currentDT = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
dest_table = "detail"
stg_table = "test"
dest_columns=['id','Name','Store','Location','Insert_time']
stg_columns = ['id','Name','Store','Location']
add_column=currentDT

dest_col_str = ""
for i in dest_columns:
    dest_col_str  += i+", "
dest_col_str  = dest_col_str [:-2]


data = "select distinct * from "+stg_table
cursor.execute(data)
List = cursor.fetchall()

for i in range(len(List)):
    e = List[i]

source_data = ""
        for x in e:
            if str(x) == '':
                source_data += 'null'
            elif type(x) == datetime or type(x) == str or type(x) == unicode:
                source_data += "'"+str(x)+"'"
            else:
                source_data += str(x)
            source_data+=','

query="INSERT INTO  "+dest_table+"("+dest_col_str +" , "+add_column+") values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)"

data=source_data+add_column          
cursor.execute(query,data)
cursor.execute("COMMIT;")

标签: pythonpython-2.7amazon-web-services

解决方案


在“s”之前使用反斜杠,如下所示。

 ('1','Mark Jason','Carl\'s', 'NY') 

它会解决你的问题。


推荐阅读