2017-10-30 12 views
1
const userPhoneNumber = await transaction.one(pgp.as.format(`${pgp.helpers.update({ 
     modifiedById: login.objectId, 
     modifiedTimestamp: now, 
     phoneNumber 
    }, columnSets.userPhoneNumbers.forUpdateById)} WHERE object_id = $/objectId/ AND removed = $/removed/ AND userId = $/userId/ RETURNING *`, { objectId, removed: false, userId })); 

바로 지금 내 코드에서이 작업을 수행하고 있습니다. 나는, 나뿐만 아니라 여기 쿼리 파일을 활용하는 방법을 잘 모르겠습니다 열 그러나 SQL을 열 집합을 사용하여 PgPromise 인라인 쿼리 형식으로 원시 SQL 사용 안 함

를 생성하기 위해 설정 한 컬럼과 함께

  • 사용 pgp.update 방법을 설정 활용

    1. 할 수 있도록하려면 . 내 자바 스크립트 코드에서 원시 SQL 문자열을 사용하지 않도록 쿼리 파일을 어떻게 사용할 수 있습니까?

      은 지금은 단지 그렇게

      {statement:raw} WHERE object_id = $/objectId/ AND removed = $/removed/ AND userId = $/userId/ RETURNING *

      같은 쿼리 파일을하고 생각할 수 있습니다하지만이 부분 원시 문을 주입하는 ABIT hackish 느낀다.

  • 답변

    1

    먼저 사용하는 열과 테이블에 따라 ColumnSet 개체를 정적으로 선언해야합니다. 예를 들어 :이 쿼리를 실행하는 시간이되면

    const cs = new pgp.helpers.ColumnSet(['col1, col2', 'col3'], {table: 'my-table'}); 
    

    , 당신은이처럼 WHERE 조건을 준비 :

    const updateSql = pgp.helpers.update(data, cs) + where; 
    
    :

    const where = pgp.as.format(' WHERE object_id = ${objectId} AND removed = ${removed} AND 
        userId = ${userId} RETURNING *', {objectId, removed, userId}); 
    

    그런 다음이 같은 완전한 UPDATE SQL을 생성 할 수 있습니다

    이제 SQL을 실행할 수 있습니다.

    나는 당신이 할 수 있지만 당신이 원하는 경우 추가로 설명 된 바와 같이 외부 쿼리 파일을 사용하여 훨씬 포인트,,,가없는 여기

    당신의 예에서 쿼리 파일을 활용하는 방법을 잘 모르겠습니다.

    다음과 같은 파일을 만들 수 있습니다

    ${update:raw} WHERE object_id = ${objectId} AND removed = ${removed} AND 
    userId = ${userId} RETURNING * 
    

    그런 다음 당신처럼로드를 다른 모든 QueryFile이 같은

    const qf = new pgp.QueryFile(path, options); 
    

    그리고 당신이 생성 할 수있는 완전한 SQL 쿼리 :

    const updateSql = pgp.as.format(qf, { 
        update: pgp.helpers.update(data, cs), 
        objectId, 
        removed, 
        userId 
    }); 
    
    +0

    마치 이중으로 queryfilr을 사용하거나 원시 SQL 문자열을 대구에 작성해야합니다. 이자형. Idk 왜 raw SQL을 깔끔한 솔루션으로 만들지는 않을까 하하 – Zanko

    +0

    @Zanko Library'pg-promise'는 원시 SQL을 실행하기위한 것입니다. 그렇다면 원시 SQL을 준비 할 때의 문제점은 무엇입니까? SQL을 작성하는 것을 좋아하지 않거나 그것을 이해하지 못하는 사람들은 보통 ORM을 선호합니다. 라이브러리'pg-promise'는 최고의 성능과 궁극적 인 유연성에 관한 것입니다. –

    +0

    @ Zanko 내 대답이 귀하의 질문에 만족하면 동의하십시오. b.t.w. 나는'pg-promise'의 저자이기 때문에 더 좋은 답변을 찾지 못할 것입니다 :) –