PostgreSQL, Python 연결

컴순이·2024년 3월 25일

1. 윈도우 환경에서 PostgreSQL을 조작하고 싶다

psql --version 실행이 안 되면 환경 변수 Path PostgreSQL 위치 추가 (C:/Program Files/PostgreSQL/14/bin)

psql -U [DB사용자 이름]

정상적으로 입력이 되면 프롬프트 앞부분이 경로가 아니라 사용자이름=# 으로 바뀜

CREATE TABLE todo(
	id SERIAL,
    contents VARCHAR(256) NOT NULL,
    is_done BOOLEAN NOT NULL,
    PRIMARY KEY (id)
);

SELECT * FROM todo;

INSERT INTO todo VALUES(contents, is_done) VALUES('test', true);
SELECT * FROM todo;

왠지 모르겠는데 VARCHAR은 작은 따옴표로 감싸야 한다. 큰따옴표 쓰면 안됨. ID는 원래 1이다

DELETE FROM todo WHERE contents='test';

이런식으루 SQL문을 PostgreSQL 문법에 맞게 잘 쓰면 된당

2. Python에 연결하고 싶다

pip install psycopg2		# python, postgres 연동
pip install sqlalchemy  	# ORM
pip install cryptography	# DB에 접속할 때 인증, 암호 관련 처리

라이브러리를 설치한 후

from sqlalchemy import Boolean, Column, Integer, String
from sqlalchemy.orm import declarative_base

Base = declarative_base()

class ToDo(Base):
    __tablename__ = "todo" 
    id = Column(Integer, primary_key=True, index=True)
    contents = Column(String(256), nullable=False)
    is_done = Column(Boolean, nullable=False)

DB에서 만든 테이블와 연동될 클래스를 만든다

from sqlalchemy import create_engine, select
from sqlalchemy.orm import sessionmaker
from connection import SessionFactory

DATABASE_URL = 'postgres://사용자이름:사용자비밀번호@localhost/DB이름'

engine = create_engine(DATABASE_URL, echo=True)	# SQL문 로그 프린트
SessionFactory = sessionmaker(autocommit=False, autoflush=False, bind=engine)

session = SessionFactory()
result = session.scalars(select(ToDo))
print(list(result))

오류가 나면 session.scalar(select(1)) 를 통해 세션 연결이 잘 되었는지 (DB가 꺼져 있지는 않은지 등) 확인해본다.

profile
음음

0개의 댓글