일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- REACT
- SQL 연산자
- 플랙스박스기본
- SQL
- 객체지향프로그래밍
- Hooks
- 스프링
- numpy
- 자바 스프링
- java spring
- SQL 명령어
- 이클립스
- java설치
- 자바스프링
- 노마드코더
- Flexbox Froggy
- HTML5
- Eclipse
- 리액트
- ubuntu
- spring
- Flex Box 기본
- spring 환경설정
- 타입
- 환경설정
- 관계형데이터베이스
- node.js
- 람다식
- SQL 문제
- 오산대맛집
- Today
- Total
이것저것
(2) pycharm에 mysql 불러오기 본문
참조
우선 mysql workbench에서 작업을 한뒤에 pycharm에서 불러오기로했다.
test 용으로 하기위해 test.py라는 파일에서 우선 작업했다.
import pymysql
db = pymysql.connect(host="127.0.0.1",user="root",password="1234", db="dms", charset="utf8")
#cursor는 Connection으로부터 Cursor를 생성하고, db의 sql문을 실행하고 조회된 결과를 가져오는 역할을 한다.
cursor = db.cursor()
sql = "select * from users"
# execute : cursor 객체에 sql문을 실행, 지금은 user table을 불러왔다.
# -executemany : cursor 객체에 동일한 sql문에 파라미터를 변경하여 실행한다.
# -executescript : cursor객체에 세미콜론으로 구분된 여러줄의 sql문을 실행한다.
cursor.execute(sql)
# db 데이터 가져오기 cursor의 메소드
# cursor.fetchall() #모든 행 가져오기
# cursor.fetchone() # 하나의 행만 가져오기
# cursor.fetchmany() # n개의 데이터 가져오기 (n)이렇게 넣어주면된다.
rows = cursor.fetchall()
print(rows)
# DB에 생성, 삭제, 수정등 데이터 변동이 생기면 commit()으로 저장을 해줘야한다.
db.commit()
db.close()
host는 flask 실행했을때 나온 주소를 넣어도 되고 "localhost"라고 적어도된다.
뒤에 :5000은 port니까 빼고 적어줘야한다.
user는 mysql workbanch 생성할때 만든 아이디, password는 아이디 만들때 작성한 비밀번호
대부분 root에 1234로 작성한다.
db는 workbanch에서 만든 db이름 charset은 한글 지원하도록 utf-8
sql = 뒤에 select 부분은 sql 구분인데 users라는 테이블은 내가 생성해서 나오는거니
보통은 자신이 만든 테이블 이름을 작성해주면된다.
이 코드는 점프 투 플라스크에서 쓰는 코드와 상관없이 그냥 MySQL 데이터가 불러와지는지 확인 차 사용한 코드이다.
MySQL과 Flask를 연동하기 위해서 ORM이라는 플라스크 라이브러리를 사용할 예정이다.
가장 기본인 설치부터하자
pip install flask-migrate
flask-migrate를 설치하게되면 mysql이나 sql lite를 사용할때 필요한 SQLAlchemy도 함께 설치되므로 편하다.
점프 투 플라스크에서는 sql-lite를 사용하지만 나는 MySQL을 사용하므로 MySQL에 맞게 수정하였다.
config.py 파일을 만들어서 MySQL 데이터베이스 접속 주소를 불러오자
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:1234@localhost/dms'
SQLALCHEMY_TRACK_MODIFICATIONS = False
config.py는 루트 디렉토리에 생성하면된다.
그리고 이제 ORM을 적용하는 코드이다.
__init__.py 파일을 수정하면된다.
from flask import Flask
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemy
import config
db = SQLAlchemy()
migrate = Migrate()
# create_app함수가 app 객체를 생성해 반환하도록 하는 이유는
# app=Flask(__name__)을 전역으로 사용하게되면 오류가 발생하기 때문(순환 참조 오류)
# create_app이 '애플리케이션 팩토리'이다.
# create_app 대신 다른 이름을 사용하면 정상작동하지 않는다.
def create_app():
app = Flask(__name__)
app.config.from_object(config)
# ORM
db.init_app(app)
migrate.init_app(app, db)
# 블루프린트 작업 : Flask에서 URL과 함수의 매핑을 관리하기 위해 사용하는 도구이다.
# 블루프린트를 이용하면 라우팅 함수를 체계적으로 관리할 수 있다.
from .views import main_views
app.register_blueprint(main_views.bp)
return app
이렇게 config.py 파일을 import 한뒤 불러오기 위해 app.config.from_object(config) 코드를 추가하고 전역변수로 db, migrate 객체를 만든다음 create_app 함수 안에서 init_app 메서드를 이용해 app에 등록했다는 코드라고한다...
-점프 투 플라스크 그대로 참조-
플라스크는 이러한 패턴을 자주 사용한다. db 객체를 create_app 함수 안에서 생성하면 블루프린트와 같은 다른 모듈에서 사용할수 없기 때문에 db, migrate와 같은 객체를 create_app 함수 밖에 생성하고, 해당 객체를 앱에 등록할 때는 create_app 함수에서 init_app 함수를 통해 진행한다.
그리고 이제 데이터 베이스를 초기화해서 migrations라는 디렉토리가 자동으로 생성되게해야하는데...
여기서 막혔었다.
flask db init을 통해서 데이터베이스를 관리하는 초기 파일들을 생성해야하는데
계속
Error: Could not locate a Flask application. Use the 'flask --app' option, 'FLASK_APP' environment variable, or a 'wsgi.py' or 'app.py' file in the current directory.
Usage: flask [OPTIONS] COMMAND [ARGS]...
Try 'flask --help' for help.
Error: No such command 'db'.
계속 이런 오류가 떠서
set FLASK_APP=pybo
set FLASK_DEBUG=true
를 따로 터미널에서 입력하고 flask db init도 해보고
run_dms.cmd를 cmd창에 들어가서 실행한뒤 flask db init을 해보고 별걸 다해봤는데 해결이 되지않았다...
결국에 flask db init은 최조 한번만 수행하면 된다는 말에서
run_dms.cmd에서 실행할때 수행하면 되지 않을까 생각하고 run_dms.cmd에 넣어보았다.
@echo off
cd c:/dev/Python/DMS
set FLASK_APP=pybo
set FLASK_DEBUG=true
flask db init
call C:\Users\KOSA\anaconda3\envs\DMS\Lib\venv\scripts\nt\activate
flask run
pause
이렇게 set FLASK_DEBUG=true 다음에 바로 실행되게 flask db init을 넣어준뒤
run_dms를 했더니 바로 migrations가 생성되었다...
test.py는 상관없고
위에 migrations가 생성되면된다.
안에 파일들은 자동으로 생성된다.
(파일들이 무슨역할을 하는지는 몰라도된다고한다(?))
후...
일단 run_dms를 실행할때마다 데이터 베이스가 초기화 되면 안될꺼 같아서 처음 실행할때만 작성해주고
지워놨다....
계속 적어놔도 되는지는 더 알아봐야겠다.
지우는게 맞다고한다.
'Python' 카테고리의 다른 글
(4) 메인 페이지 및 bootstrap, navbar 설정 (0) | 2023.11.25 |
---|---|
(3) 모델 생성하기 (5) | 2023.11.23 |
(1) Pycharm에서 Flask 사용하기 (2) | 2023.11.22 |
딥러닝 - 이미지 데이터 전처리 및 학습(2) (2) | 2023.11.02 |
딥러닝 - 이미지 데이터 전처리 및 학습(1) (0) | 2023.11.02 |