Python3 Django 기능 관련

denver·2022년 9월 20일
1

Python3 Django

목록 보기
2/2

DB Migration 관련

###
models.py에 있는 class별 변경 사항에 대하여
"migrations" 폴더에 DB 쿼리로 파일화 시켜줌
* 참고
class Meta:
	// models.py에 해당 부분을 False로 지정하면
	// 실제 DB 동기화 안됨(동기화 필요 시, 해당 구문 주석)
	managed = False
###
$(venv) python manage.py makemigrations [관련 프로젝트 폴더] // 파일화
$(venv) python manage.py migrate [관련 프로젝트 폴더] // 파일화 쿼리문 DB 동기화

마이그레이션 적용된 내역 보는 명령어

$(venv) python manage.py showmigrations 앱이름

데이터베이스 모델 스키마 정의

# 현재 연결된 데이터베이스의 스키마 목록을 ORM 구조로 뽑아준다
$(venv) python manage.py inspectdb

# 그리고 나온 스키마 중에서 필요한 스키마를 복사하여 models.py에 추가
[관련 프로젝트 폴더]/models.py 코드 추가

# 동기화 작업 시작
$(venv) python manage.py makemigrations [관련 프로젝트 폴더] // 파일화
$(venv) python manage.py migrate [관련 프로젝트 폴더] // 파일화 쿼리문 DB 동기화

pbkdf2_sha256 암호화

from django.contrib.auth.hashers import make_password
from django.contrib.auth.hashers import check_password

# pbkdf2_sha256 password create
make_password('818283')

# pbkdf2_sha256 password check
check_password('818283', 'pbkdf2_sha256$320000$UIT~~~~~')

트랜잭션

from django.db import transaction

@api_view(['POST'])
@transaction.atomic // 이 구문 추가 해주면 디비 구문 하나라도 오류 날 때, 롤백 해줌
def xxxxxxxxxxxx(request):
	// code
    try:
		with transaction.atomic():

api method 정의

from rest_framework.decorators import api_view

@api_view(['POST']) // 'POST' or 'GET' 등.
def xxxxxxxxxxxx(request):
	// code

Json 형태의 결과 값 정의

from rest_framework.response import Response

return Response([결과값])

ORM 형태가 아닌 기존 디비 방식

from django.db import connection

cursor = connection.cursor()
query = "SELECT ~~~~ WHERE ~~~ %s, %s"
cursor.execute(query, (파라메터1, 파라메터2)) // 위의 %s가 파라메터 인자 값

환경변수 셋팅

[settings.py]

import dotenv

dotenv.read_dotenv()

os.environ.get([변수]) // .env 파일에 있는 변수값 불러오기

디버그 모드 분기

DEBUG = os.environ.get("DEBUG", "False").lower() in ('true', '1', 't')

pymysql 관련 셋팅

  • mysqlclient 및 PyMySQL 라이브러리 설치 필요
[settings.py]
import pymysql

pymysql.install_as_MySQLdb()

DATABASES = {
    'default': {
        'ENGINE': os.environ.get("DATABASE_ENGINE"),
        'NAME' : os.environ.get("DATABASE_NAME"),
        'USER' : os.environ.get("DATABASE_USER"),
        'PASSWORD' : os.environ.get("DATABASE_PASSWORD"),
        'HOST': os.environ.get("DATABASE_HOST"),
        'PORT': os.environ.get("DATABASE_PORT"),
        'OPTIONS':{
            'init_command' : "SET sql_mode='STRICT_TRANS_TABLES'"
        }
    }
}

dict 형태로 쿼리 결과 값 정렬 함수

def dict_fetch_all(cursor):
    "Return all rows from a cursor as a dict"
    columns = [col[0] for col in cursor.description]

    return [
        dict(zip(columns, row))
        for row in cursor.fetchall()
    ]

ex)

cursor = connection.cursor()
query = "SELECT * FROM [TABLE NAME]"
queryResult = cursor.execute(query)
dictResult = dict_fetch_all(cursor)

Insert된 id 불러오기

ex)
query = "insert into [TABLE NAME] (xxx) values ('xxx')"
insertId = cursor.lastrowid
profile
Python, AWS, Node, PHP, Git Developer

1개의 댓글

comment-user-thumbnail
2022년 9월 20일

[2022.09.20]
안녕하세요. HR맨파워 김태원 이사입니다.
잡코리아 제안 드렸는데, 답장이 없어서 찾아보다 여기에 댓글 남깁니다.

*기업 : 아웃도어 플랫폼 스타트업(요청시 오픈 드립니다)

● 포지션 : 백엔드 엔지니어
[주요직무]
서비스 서버 API 개발, 고도화 및 개선
AWS 기반의 인프라 설계 및 운영
초기 서비스 개발을 위한 새로운 기술의 제안 및 적용

전체 JD 확인을 원하시면 하단 메일 또는 전화로 요청하시면 보내드리겠습니다.
감사합니다.

이사/ 컨설턴트
김 태 원
Mobile. 010-7510-1237
E-mail. ktw@hrman.co.kr
서울 강남구 테헤란로 332 한신인터밸리24 서관 18층

답글 달기