TIL - python - django - 기존 db연동

연주·2022년 11월 13일
0

KDT-TIL

목록 보기
34/36

📌 python django 사용해보기

장고 프로젝트에 필요한 플러그인 등 버전을 관리하기 위해 가상환경이 필요하다.
가상환경 없이 그냥 설치해버리면 프로젝트마다 프로그램 버전이 달라서 문제가 생길 수 있어서,
한 프로젝트마다 해당 프로젝트에 맞는 도구를 넣는 공구함이라고 생각

📝 가상환경 설정

  1. 폴더를 만든다.
  1. 터미널에 가상환경 설정
    새로 만든 폴더에 들어가서 시작한다.

python -m venv djangovenv

  1. F1 select interpreter ➜ python:Select interpreter 선택
    설정했던 가상환경 폴더와 같은 이름의 항목을 선택

  2. 터미널에 + 로 새로운 터미널 실행

⛔️ 터미널에 에러가 뜸

& : 이 시스템에서 스크립트를 실행할 수 없으므로 D:\jeongyeonju\prac\pyt
hon\djangovenv\Scripts\Activate.ps1 파일을 로드할 수 없습니다. 자세한  
내용은 about_Execution_Policies(https://go.microsoft.com/fwlink/?LinkID
=135170)를 참조하십시오.
위치 줄:1 문자:3
+ & d:/jeongyeonju/prac/python/djangovenv/Scripts/Activate.ps1
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : 보안 오류: (:) [], PSSecurityException   
    + FullyQualifiedErrorId : UnauthorizedAccess
    

명령어 다음과 같이 입력

ExecutionPolicy ⬅️ 현재상태확인
Restricted ⬅️ 모든 스크립트 막은 상태

Set-ExecutionPolicy Unrestricted

ExecutionPolicy ⬅️ 현재상태확인
Unrestricted ⬅️모든 스크립트 허용 상태

파워쉘 오류라고 해서, 보통 이렇게 하면 되는데
계속 해결이 나지 않아서 물어봤더니,
터미널을 파워쉘말고 cmd로 하면 된다고 했다.

집에 있는 노트북으로 했는데 파워쉘 오류 없이 바로 새로운 터미널 생성되기는 했다.


📝 본격 장고 설치

1.장고 설치

python -m pip install django

2.프로젝트 생성

django-admin startproject 프로젝트명
django-admin startproject firstproject

  1. manage.py 실행

해당 폴더로 이동 후
python manage.py runserver

  1. http://127.0.0.1:8000/ 로 이동하면 서버가 나온다.

📝 기존 DB 연결

1.mariaDB연동을 위해 mysqlclient 설치
pip install mysqlclient

  1. 새로운 앱을 만든다.
    python manage.py startapp mariadb

  2. django에서 DB에 접근할수 있도록 설정
    firstproject/settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'aitrading_db',
        'USER':'root',
        'PASSWORD':'1234',
        'HOST':'localhost',
        'PORT':'3307',
    }
}

위 코드로 바꿔서 설정을 한다.

  1. 기존 DB migration 수행 - models.py 생성

django가 연동한 DB에 초기화 할 수 있도록 한다.

python manage.py inspectdb> '저장하고자하는위치'/models.py
python manage.py inspectdb> mariadb/models.py

수행하고나면, 해당 폴더에 기존DB에 있던 modelobject가 모두 자동으로 생성된다.

  1. django DB migration 수행

자동으로 생성하고,
python manage.py makemigraions
python manage.py migrate

python manage.py migrate // 적용되지 않은 migrations들을(설정값들을) 적용시키는 역할
python manage.py makemigrations // models.py에서 적용한 변경사항이나 추가된 혹은 삭제된 사항들을 감지하여 파일로 생성
mariadb/view.py

📝 연결한 DB 출력

  1. view.py 설정
    mariadb/view.py
from django.shortcuts import render
from .models import Kosdak000440M


def post_view(request):

    result = Kosdak000440M.objects.all()
    # Kosdak000440M 테이블의 모든 객체를 불러와서 result변수에 저장

    return render(request, 'index.html', {"result": result})
  1. url을 연결시킨다.
    firstproject/url.py
from django.contrib import admin
from django.urls import path
from mariadb import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('post/', views.post_view),
]
  1. index.html 생성
    mariadb폴더에 templates 폴더 생성 후 index.html 생성
  <body>
    <h1>DB연동</h1>
    <ol>
      {% for result in result %}

      <li>
        시가: {{result.open}} 종가 : {{result.close}} 날짜 : {{result.day}}
      </li>
      {% endfor %}
    </ol>
  </body>
  
  1. 출력

⛔️ 구글링했을때 result_open 이런식으로 언더바를 사용해서 데이터를 가져오라고 했는데,

데이터의 개수만큼 <li>태그가 생겼는데,
중요한 데이터값이 계속 안들어와서
혹시나하고, result.open으로 했더니 값이 가져와졌다.


DJango 의 inspectdb 기능때문에, django를 쓰는 건가
자동으로 가져와주는게 기존의 db를 자동으로 가져온다.

문제는 지금 갖고 있는 db 테이블의 개수가 몇만개인데..
다가져오지 못하고 있는 데 어떻게 해야할 지 모르겠다..ㅠ

profile
성장중인 개발자🫰

0개의 댓글