>

Postgres에 SQL 삽입을 위해 문자열의 각 끝에서 따옴표를 제거하고 싶습니다.

현재 내 코드는 다음과 같습니다 :

label='ave_number'
sql_cmd=u"""UPDATE rpt.so_form2_test_noquotes SET %s=%s WHERE channel_id=%s and report_id=%s and load_date=current_date;"""
                            sql_params=(label, e[u"label"],channel_id,report_id,)
                            calldb(conn, sql_cmd, sql_params)
def calldb( db, sql_cmd, sql_params):   # invoke backend function that is a INSERT/UPDATE statement
    try:
        cur = db.cursor()  # use standard cursor as return is likely void
        print 'Executing sql cmd "{0}"'.format(cur.mogrify(sql_cmd, sql_params))
        cur.execute(sql_cmd, sql_params)
        return   # execute returns None expected
    except Exception as e:
        print u'Error ', e 
        raise

Postgres 열 이름은 따옴표없이 ave_number입니다. % s가 문자열로 대체되면 'ave_number'라는 열이 없다는 오류가 발생합니다.

미리 감사합니다


  • 답변 # 1

    당신이 psycopg2.extensions에서 AsIs를 사용해야한다고 생각합니다

    from psycopg2.extensions import AsIs
    import psycopg2
    
    def calldb( db, sql_cmd, sql_params):   # invoke backend function that is a INSERT/UPDATE statement
        try:
            cur = db.cursor()  # use standard cursor as return is likely void
            print 'Executing sql cmd "{0}"'.format(cur.mogrify(sql_cmd, sql_params))
            cur.execute(sql_cmd, sql_params)
            return   # execute returns None expected
        except Exception as e:
            print u'Error ', e
            raise
    
    conn = psycopg2.connect(host='localhost', port=5432, user='xxxxxxx', password='xxxxxx')
    label='ave_number'
    e={u'label':'test_label'}
    channel_id=1
    report_id=1
    sql_cmd=u"""UPDATE rpt.so_form2_test_noquotes SET %s=%s WHERE channel_id=%s and report_id=%s and load_date=current_date;"""
    sql_params=(AsIs(label), e[u"label"],channel_id,report_id,)
    calldb(conn, sql_cmd, sql_params)
    
    

    이 출력

    Executing sql cmd "UPDATE rpt.so_form2_test_noquotes SET ave_number='test_label' WHERE channel_id=1 and report_id=1 and load_date=current_date;"
    
    

관련 자료

  • 이전 loops - 문자열에 구두점이 포함되어 있는지 확인하는 방법 C ++
  • 다음 ld에서 정의되지 않은 기호 오류를 제한하는 방법은 무엇입니까?