728x90
내일배움캠프 4기_DB특강 13일차 TIL
오늘은 sql특강이 길어지면서 4시 20분에 끝났다.
과제를 내주셨는데, 이부분을 공부 중이다.
📄 MySQL
USE sparta_test
-- 학생 테이블 생성
CREATE TABLE student(
id int PRIMARY KEY AUTO_INCREMENT
,
name varchar(50) NOT NULL
,
email varchar(50) UNIQUE
)
-- 도시 테이블 생성
CREATE TABLE city(
id int PRIMARY KEY AUTO_INCREMENT
,
name varchar(50) NOT NULL
)
-- 학생 데이터 입력
INSERT
INTO
student
VALUES(
NULL
,'홍길동'
, 'hjd@naver.com'
);
INSERT INTO student(name) VALUES ('김민수'),('한동주'),('우태현')
-- 도시 데이터 입력
INSERT INTO city(name) VALUES ('서울'),('도쿄'),('뉴욕'),('상하이'),('파리')
-- 학생테이블 수정(city_id) 칼럼 추가
ALTER TABLE student ADD column city_id int,
ADD CONSTRAINT `fk_city_table_id` FOREIGN KEY student(city_id) REFERENCES city(id);
-- 학생테이블 칼럼(city_id) 삭제
alter table student drop city_id;
-- 학생테이블 외래키(foreign key) 삭제
ALTER TABLE student DROP FOREIGN KEY fk_city_table_id
-- city랑 학생 테이블 조인
SELECT * FROM student s INNER JOIN city c
ON s.city_id = c.id;
-- 학생 이메일 업데이트
UPDATE
student
SET
email = 'kms@gamil.com'
WHERE
name = '김민수'
-- 학생 검색(이메일)
SELECT * FROM student s
WHERE email IS NULL
-- 학생 데이터 삭제
DELETE FROM student WHERE id = 1
-- 전체 학생 조회
SELECT * FROM student s
📌 Shell로 mysql 접근
저번에 환경변수에서 path 설정해준것 같은데, 또 안되서 다시시도~
set PATH=%PATH%;C:\Program Files\MySQL\MySQL Server 8.0\bin
📌 test DB 만들기
create database flask_test;
flask_test라는 이름의 데이터 베이스 생성!
📌 python 라이브러리 설치
- SQLAlchemy : 파이썬 코드에서 DB와 연결하기 위해 사용되는 라이브러리
- MySQL-Connector : 파이썬에서 DB를 사용하기 위한 공식 API
📄 config.py 생성
db = {
'user' : 'root',
'password' : '[mysql 비밀번호]',
'host' : '127.0.0.1',
'port' : '3306',
'database' : 'flask_test'
}
DB_URL = f"mysql+mysqlconnector://{db['user']}:{db['password']}@{db['host']}:{db['port']}/{db['database']}?charset=utf8"
config.py는 프로젝트 환경에 맞는 설정을 따로 해주는 파일이다.
주로 .gitignore 파일에 추가해 git repo에 올라가지 않도록 관리한다.
📄 DBeaver에서 user테이블 생성하기
USE flask_test;
CREATE TABLE users(
id int NOT NULL AUTO_INCREMENT,
email varchar(200),
password varchar(200),
PRIMARY key(id)
);
Shell명령어로도 한번 더 확인!
alter table users drop id;
오류 확인되어 id칼럼 삭제
import pymysql
db = pymysql.connect(host='localhost', user='root', password=[mysql 비번], charset='utf8')
cursor = db.cursor(pymysql.cursors.DictCursor)
cursor.execute('USE flask_test')
cursor.execute('insert into users (email, password) values ("xxxxhh@naver.com", "12345678")')
db.commit()
db.close()
이렇게 하면 잘 되는데, 서버로 받는 걸 하면 작동되지 않는다...ㅠ
내가 설정한 비밀번호가 @로 끝나는데, 설마.... @@구분 못하는건가.
mysql+mysqlconnector://root:12345678@@127.0.0.1:3306/flask_test?charset=utf8
혹시 몰라 비밀 번호 변경 후, 재시도!!!
비밀번호 끝에 @으로 끝나게 설정하면 sqlalchemy라이브러리 사용 db mysql연동 안된다! 이부분을 주의 하자!!
flask mysql 연동
📄 app.py
from flask import Flask, render_template, request, jsonify
from sqlalchemy import create_engine, text
app = Flask(__name__)
@app.route('/')
def root():
return render_template('index.html')
@app.route('/users', methods=['POST'])
def users():
users = request.json
print(users)
result = app.database.execute(text("""
INSERT INTO users (
email,
password
) VALUES (
:email,
:password
)
"""), users).lastrowid
print("result", result)
return "users insert success", 200
# 서버 실행
if __name__ == '__main__':
app.config.from_pyfile('config.py')
database = create_engine(app.config['DB_URL'], encoding='utf-8')
app.database = database
app.run()
📄 config.py
db = {
'user': 'root',
'password': 'mysql비번',
'host': '127.0.0.1',
'port': 3306,
'database': 'flask_test'
}
DB_URL = f"mysql+mysqlconnector://{db['user']}:{db['password']}@{db['host']}:{db['port']}/{db['database']}?charset=utf8"
# print(DB_URL)
📌 postman으로 jsonquery 전달
📌 DBeaver insert 확인
비밀번호 변경해주니 잘 된다..
📌 mysql 비밀번호 변경
mysql -u root -p
use mysql;
alter user 'root@localhost' identified with mysql_native_password by 'new password';
flush privileges;
'TIL' 카테고리의 다른 글
내일배움캠프 4기_DB특강 15일차 TIL (0) | 2022.12.02 |
---|---|
내일배움캠프 4기_DB특강 14일차 TIL (0) | 2022.12.01 |
내일배움캠프 4기_개인진도 12일차 TIL (0) | 2022.11.29 |
내일배움캠프 4기_개인진도 11일차 TIL (1) | 2022.11.28 |
내일배움캠프 4기_개인진도 10일차 TIL (0) | 2022.11.25 |