그외

PostgreSQL 사용법에 관한 기록

체봄 2021. 12. 6. 21:26

 

터미널에서 $ sudo -u postgres psql 을 치면 postgres로 접속된다.

postgres=# 로 바뀐 것을 확인할 수 있다.

여기서 postgres는 현재 DB 인스턴스명이다.

 

# \list 를 입력하면 모든 DB 인스턴스 목록을 확인할 수 있다.

다른 DB 인스턴스를 사용하려면 # \c 인스턴스명 을 입력해준다.

더 많은 명령어는 아래 블로그를 참고하면 좋을 것 같다 :)

 

알아두면 유용한 psql 명령어 정리

PSQL 보통 PostgreSQL을 설치할 때 Client Tool인 pgAdmin이 같이 설치되고, 대부분 GUI 환경에서 pgAdmin을 사용하기 때문에 PSQL의 존재조차 모를 때가 있다. (필자는 PostgreSQL 처음 사용했을 때 psql의 존재..

browndwarf.tistory.com

 

이제 이곳에다가 SQL문을 그대로 작성할 수 있다.

주의할 점은 SQL문 맨 끝에 반드시 ; 를 붙여줘야 제대로 실행된다.

SQL문을 실행한 후 빠져나오려면 q를 눌러주면 된다.

 

 

유의사항

  • 어떤 명령어에서는 테이블명 앞뒤에 double quote를 붙여줘야 잘 실행된다. (single quote도 안됨)
    • ex) ALTER TABLE table1 ADD column1 varchar(5) null; 이라는 쿼리를 실행할 때 syntax error가 나서 구글링해본 결과, ALTER TABLE "table1" ADD column1 varchar(5) null; 로 해줘야 잘 실행되었다.
  • SQL 쿼리문을 바르게 작성했는데 'ERROR: syntax error at or near "" ' 에러가 뜨는 경우
    • 쿼리문을 문법에 안 맞게 작성해서 에러가 뜬 후, 다시 문법에 맞게 고쳐 썼는데도 에러가 날 수 있다.
    • # \e 를 입력하면 최근에 실행했던 쿼리문이 적혀있는데, 문법에 안 맞게 작성했던 쿼리문과 고쳐 쓴 쿼리문이 써져 있을 것이다. 문법에 안 맞게 작성했던 쿼리문 부분을 지워주고 ctrl+x -> Y를 눌러 저장하고 나오면 제대로 쓴 쿼리문이 실행되어 결과가 출력된다.
  • 일반적인 SQL 쿼리문과 문법이 다른 경우가 존재한다.
    • ex) 테이블 컬럼 타입을 변경하려면 원래는 ALTER TABLE 테이블명 MODIFY 컬럼명 타입; 으로 작성하지만 postgre에서는 ALTER TABLE 테이블명 ALTER COLUMN 컬럼명 TYPE 타입; 와 같이 작성해야 한다.

 

 

 

sqlalchemy를 이용해 postgresql 연결

예제 코드

from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Text, ForeignKey

DB = {
    "user": "",
    "password": "",
    "host": "",
    "database": "",
    "port": ""
}

engine = create_engine(f"postgresql://{DB['user']}:{DB['password']}@{DB['host']}/{DB['database']}", convert_unicode=False)
db_session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine))

Base = declarative_base()
Base.query = db_session.query_property()
Base.metadata.create_all(engine)


class ExampleTable(Base):
    __tablename__ = 'example_table'
    col1 = Column(String(10), primary_key=True)
    col2 = Column(Text)
    col3 = Column(Integer)

    def __init__(self, col1, col2, col3):
        self.col1 = col1
        self.col2 = col2
        self.col3 = col3

    def __repr__(self):
        return f"<ExampleTable('{self.col1}', '{self.col2}', '{self.col3}')>"


def get_col1(param: str):
    return db_session.query(ExampleTable).filter_by(col1=param).all()
    
    
if __name__ == '__main__':
	col1 = get_col1(param='abc')

 

 

 

참고

https://yujuwon.tistory.com/entry/SQLAlchemy-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

반응형