2017-10-11 6 views
0

spark-redshift 독자의 "쿼리"옵션에 전달할 SQL 쿼리를 작성하려고합니다. 나는 psycopg2를 사용하려고 해요, 그래서 나는 이런 일을 수행연결없이 Postgres (Redshift)에 대한 SQL 쿼리를 생성하는 방법은 무엇입니까?

from psycopg2 import sql 

query = sql.SQL(
    "select * from {} where event_timestamp < {}" 
).format(
    sql.Identifier("events"), 
    sql.Literal(datetime.now()) 
).as_string() 

을하지만 내가 as_string()에 컨텍스트 (연결 또는 커서)를 통과해야한다는 것을 알려줍니다. 나는 연결할 수 없기 때문에 할 수 없다.

일부 경우 이스케이프 처리와 함께 일반 문자열 형식을 사용해야합니까?

거기에 모의 상황을 전달할 방법이 있습니까? 왜 쿼리 문자열을 작성하기 위해 연결해야합니까? 연결에 따라 SQL 쿼리가 변경됩니까?

답변

1

나는 spark에 익숙하지 않지만 SQL 지원이 없다면 놀랄 것입니다. 또 다른 대안은 sqlbuilder과 같은 경량 패키지입니다.

psycopg를 정말로 사용하고 싶다면, 단위 테스트를 mock-psycopg2's ConnectingTestCase과 함께 사용하는 방법을 살펴 보는 것이 좋습니다.

class ConnectingTestCase(unittest.TestCase): 
    """A test case providing connections for tests. 

    A connection for the test is always available as `self.conn`. Others can be 
    created with `self.connect()`. All are closed on tearDown. 

    Subclasses needing to customize setUp and tearDown should remember to call 
    the base class implementations. 
    """