# 데이터베이스를 만들겠다.
create database firstBase;
# 해당 데이터 베이스를 사용하겠다
use firstBase;
# 테이블 생성
create table student(
id int primary key auto_increment, #칼럼명 자료형 제약조건 , (primary key -> (not null&& unique) auto_increment-> 자동으로 숫자를 늘려준다 ex) 1,2,3,4
name varchar(50), #칼럼명 자료형 (varchar(50) => 문자를 50자 까지)
age int,
email varchar(50)
);
#city 테이블 생성
create table city(
id int primary key auto_increment,
city_name varchar(50)
);
#검색기능
select * #모든 걸 선택 찾겠다 ->
from student; #student 테이블에서.
select*
from city;
#테이블에 자료 추가
insert into student(name,age,email) values('김민수',92,'저도 몰라요'); #student(컬럼명1,컬럼명2,...) values(앞에 적은 컬럼명의 값! 같은 순서대로) 일부 컬럼만 선택해서 값 입력 가능
insert into student values(null,'aa',12,'adsa'); #앞의 컬럼명 조건을 안 주면 values뒤에 모든 컬럼에 대한 값을 다 넣어야한다.
# city table data insert
insert into city values(null,'서울');
insert into city values(null,'경기');
#테이블에 칼럼추가
alter table student add city_name varchar(50); # student 테이블에 칼럼 추가
alter table city add city_id int; # city 테이블에 칼럼 추가
# student에 city_id에 not null 조건을 주기 위해 일단 student에 city_id에 데이터 삽입
update student set city_id =1;
#테이블에 제약조건 추가
alter table student add constraint foreign key(city_id) references city(city_id); #제약조건 추가 foreign key 넣기
alter table student modify city_id int not null; #student 테이블에 city_id칼럼에 not null 조건 추가
# 삭제문
delete from student where id = 1; #where 조건문 -> where 컴럼명 = 컬럼값;
# 포린키명 변경
# alter table student
# drop foreign key "기존키명";
#
# alter table student
# add constraint "바꿀키명"
# foreign key (city_id) references city (city_id);
# 조인문
select s.name, c.city_name
from student s left join city c on s.city_id = c.city_id
where s.name = '김민수';
CRUD
from flask import Flask, render_template, request, jsonify
app = Flask(__name__)
import pymysql
db = pymysql.connect(host="localhost",
port=3306,
user="lee",
db='aa',
password='spartatest',
charset='utf8')
# db = config.DB_URL
curs = db.cursor()
@app.route("/members/lee/get", methods=["GET"])
def lee_sl():
sql = """select * from student"""
curs.execute(sql) # execute안에 있는 sql쿼리문을 실행시킨다.
curs.fetchall()
db.commit()
print('get 완료')
return render_template("index.html")
@app.route("/members/lee/up", methods=["POST"])
def lee_up():
datas = request.get_json()
name = datas['name']
id = datas['id']
sql = """update student set name='%s' where id = '%s'""" %(name,id)
curs.execute(sql)
curs.fetchall()
db.commit()
print("업데이트 완료")
return render_template("index.html")
@app.route("/members/lee/in", methods=["POST"])
def lee_a():
params = request.get_json()
name = params['name']
age = params['age']
email = params['email']
city_id = params['city_id']
sql ="""insert into student values (null,'%s' , '%s' ,'%s' , '%s')""" %(name,age,email,city_id)
curs.execute(sql) # execute안에 있는 sql쿼리문을 실행시킨다.
curs.fetchall()
db.commit()
print('insert 완료')
return render_template("index.html")
@app.route("/members/lee/del", methods=["Delete"])
def lee_d():
params = request.get_json()
id = params['id']
sql = """delete from student where id = '%s'""" %(id)
curs.execute(sql) # execute안에 있는 sql쿼리문을 실행시킨다.
curs.fetchall()
db.commit()
print('삭제완료')
return render_template("index.html")
if __name__ == '__main__':
app.run('0.0.0.0', port=5000, debug=True)
즉 Ajax를 이용하면 백그라운드 영역에서 서버와 통신하여, 그 결과를 웹 페이지의 일부분에만 표시할 수 있습니다.
<script>
$.ajax({
type: "GET",
url: "http://spartacodingclub.shop/sparta_api/weather/seoul",
data: {},
success: function (response) {
let temp = response['temp']
$('#temp').text(temp);
}
})
</script>
Requests
Requests란 Python용 HTTP 라이브러리이다. Python에서 특정 웹사이트에 HTTP 요청을 보내는 모듈이라고 생각하면 될 것 같다. 좀 더 쉽게 말해서 특정 웹사이트에 HTTP 요청을 보내 HTML 문서를 받아올 수 있는 라이브러리이다. 근데 정확히 말하면 얘가 가져오는 HTML 문서는 문서가 아닌 그냥 단순한 String이고, 뒤에서 배우는 BeautifulSoup에 의해 살아있는 HTML 문서로 바뀌게 된다. (함께 크롤링에 자주 쓰임)
import requests #requests 라이브러리 설치 필요
r = requests.get('http://spartacodingclub.shop/sparta_api/seoulair')
rjson = r.json()
rows = rjson['RealtimeCityAir']['row']
BS4 (BeautifulSoup)
HTML정보로 부터 원하는 데이터를 가져오기 쉽게, 비슷한 분류의 데이터별로 나누어주는(parsing) 파이썬 라이브러리
import requests
from bs4 import BeautifulSoup
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)
soup = BeautifulSoup(data.text, 'html.parser')
#copy selector
#old_content > table > tbody > tr:nth-child(2) > td.title > div > a
#old_content > table > tbody > tr:nth-child(3) > td.title > div > a
movies = soup.select('#old_content > table > tbody > tr') #중복된 앞부분
for movie in movies:
a = movie.select_one('td.title > div > a') #중복된 뒷부분
if a is not None:
print(a.text) #영화의 제목만 가져온다
dnspython, pymongo
dnspython는 DNS패키지로,
도메인을 받아 뭔가를 송수신할 때 사용됩니다!
pymongo 패키지가 동작하려면 필요한 패키지입니다.
(도메인 이름 시스템(DNS)은 사람이 읽을 수 있는 도메인 이름(예: www.amazon.com 을
기계가 읽을 수 있는 IP 주소(예: 192.0.2.44)로 변환합니다.)
from pymongo import MongoClient
client = MongoClient('여기에 URL 입력')
db = client.dbsparta
doc = {
'name':'bob',
'age':27
}
db.users.insert_one(doc)
몽고디비 코드요약
# 저장 - 예시
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)
# 한 개 찾기 - 예시
user = db.users.find_one({'name':'bobby'})
# 여러개 찾기 - 예시 ( _id 값은 제외하고 출력)
all_users = list(db.users.find({},{'_id':False}))
# 바꾸기 - 예시
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})
# 지우기 - 예시
db.users.delete_one({'name':'bobby'})
Flask
서버를 구동시켜주는 편한 라이브러리
Flask는 홈페이지에서도 “micro” 프레임워크라는 점을 강조하고 있다.
즉, 최소한의 구성 요소와 요구 사항을 제공하기 때문에 시작하기 쉽고 필요에 따라 유연하게 사용할 수 있다.
render_template를 통해 HTML 파일을 localhost:5000 로 불러올 수 있다.
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
return render_template('main.html')
if __name__ == '__main__':
app.run('0.0.0.0',port=5000,debug=True)
html Ajax와 app.py GET 연결
from flask import Flask, render_template, request, jsonify
app = Flask(__name__)
# HTML 파일 출력
@app.route('/')
def home():
return render_template('main.html')
# GET요청 확인 (request, jsonify) 필요
@app.route('/test', methods=['GET'])
def test_get():
title_receive = request.args.get('title_give')
print(title_receive)
return jsonify({'result':'success', 'msg': '이 요청은 GET!'})
if __name__ == '__main__':
app.run('0.0.0.0',port=5000,debug=True)
function hey() {
$.ajax({
type: "GET",
url: "/test?title_give=봄날은간다",
data: {},
success: function (response) {
console.log(response)
}
})
}