-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
postgresql 연동 #4
Comments
sqlalchemy orm사용 |
migration 필요. 우선 수동으로 from database import Base, engine
from domain.project.models import Project
if __name__=="__main__":
print("Creating database ...")
try:
Base.metadata.create_all(engine)
except Exception as e:
print(f"[-] Error create database: {e}") |
from sqlalchemy.orm import sessionmaker
SQLALCHEMY_DATABASE_URL = f"postgresql://{cnf.POSTGRESQL_USER}:{cnf.POSTGRESQL_PASSWORD}@{cnf.POSTGRESQL_HOST}/{cnf.POSTGRESQL_DB}"
engine = create_engine(SQLALCHEMY_DATABASE_URL, echo=True)
Base = declarative_base()
SessionLocal = sessionmaker(bind=engine, autocommit=False, autoflush=False)
db = SessionLocal() |
db 세션이 필요한 곳은 DI를 이용 def get_db():
db = SessionLocal()
try:
yield db # 세션 쓰레드 풀에서 세션을 얻어오고
finally:
db.close() # 세션을 반납
from sqlalchemy import Session
from fastapi import Depends
def get_demo(db: Session = Depends(get_db)):
db.query(...) |
|
|
시간(생성, 수정)은 mixin으로 하는 방법이 좋은 것 같다. from datetime import datetime
from sqlalchemy import Column, DateTime
from sqlalchemy.orm import declarative_mixin
from pytz import timezone
KST = timezone("Asia/Seoul")
@declarative_mixin
class TimeStamp:
created_at = Column(DateTime, default=datetime.now(tz=KST), nullable=False)
updated_at = Column(DateTime, default=datetime.now(tz=KST), nullable=False) from database import Base
from sqlalchemy import String, Integer, Column
from domain.db_mixins import TimeStamp
class Project(TimeStamp, Base):
__tablename__ = "project"
id = Column(Integer, primary_key=True)
name = Column(String(255), nullable=False, unique=True)
description = Column(String(255))
def __repr__(self) -> str:
return f"<Project name={self.name} description={self.description}" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
참고자료
The text was updated successfully, but these errors were encountered: