Flask를 이용한 데이터베이스 애플리케이션 제작 Part2
환경
macOS Catalina 10.15.1
애플리케이션 구현 내용
Flask의 사용법을 습득하기 위해 3개의 파트로 나누었다.
Part1(전고)
Part2(본고)
Part3(다음 글)
Part2의 폴더 구성
Part1과 마찬가지로 모든 코드는 run.py에 의해 실행됩니다.
run.py는 Part1과 동일한 코드를 사용했습니다.
root
|--codes
| |--view.py
| |--templates
| | |--index2.html
|--models.py
|--run.py
|--test.db
데이터베이스 SQLite와의 연결
view.py는 아래와 같습니다.
view.py 외부의 데이터베이스에 등록되어 있는 값을 model.py 의 User 클래스로 정의하는 것으로 연결하고 있다.
view.py
# SQLAlchemy はデータベース(DB)を object のように扱えるライブラリである。
# 今回は DB との連結を担当する。
# models.py の User クラスで、どのような object として扱うかを決める。
from flask import Flask,render_template
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from models import User
app = Flask(__name__)
# test.db (DB) と連結するための object である engine を作り、DB を session に代入する。
engine = create_engine('sqlite:///test.db')
session = sessionmaker(bind=engine)()
# /index2 へアクセスがあった場合に、 index2.html を返す。
@app.route("/index2")
# index2 関数を定義する。
# sessionn の全データを、User クラスで定義された object に代入し、users として返す。
# この users を html 内の users に代入する。
def index2():
users = session.query(User).all()
return render_template('index2.html', users=users)
if __name__ == "__main__":
app.run(debug=True)
SGLite로 데이터베이스 구축
데이터베이스 관리 시스템 sqlite에서 다음 test.db를 작성하십시오. sqlite는 MAC에 기본적으로 설치되어 있습니다.
id
이름
age
0
요시자키
27
1
키카가쿠
2
먼저 다음 명령을 실행합니다. test.db는 DB의 이름입니다.
터미널
sqlite3 test.db
그러면
sqlite>
라는 prefix 가 부여된 대화 모드로 전환된다. 여기서는 DB 안에 테이블을 만들 수 있다.우선 id, name, age 라는 3 개의 column 로 이루어지는 table 를 만든다.
터미널
create table users(id integer primary key autoincrement, name text, age integer);
그리고 id = 0, id = 1 의 요소를 차례로 삽입해 간다.
터미널
insert into users(name, age) values('Yoshizaki', 27);
insert into users(name, age) values('Kikagaku', 2);
select 명령으로 DB를 확인하십시오.
터미널
select * from users;
그 결과
터미널
1|Yoshizaki|27
2|Kikagaku|2
라고 출력되면, 올바르게 DB는 만들어지고 있다. 대화 모드에서는
.exit
에서 빠진다.데이터베이스 모델 정의
데이터베이스(DB)의 내용을 어떠한 object로 정의할 것인가는 다음의 model.py 로 결정한다. 이것은 SQLAlchemy 라이브러리에서도 가능합니다.
model.py
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
Base = declarative_base()
class User(Base):
__tablename__='users'
id = Column(Integer, primary_key = True)
name = Column(String)
age = Column(Integer)
SQLite의 primary key에 id를 채용했기 때문에, 모델에서도 마찬가지로 지정하고 있다.
브라우저에 표시
index2.html은 다음과 같습니다. (나중에 편집한다.)
index2.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content = "width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<hl>Flask チュートリアル</hl>
{% for user in users %}
<p>名前: {{user.name}}</p>
{% endfor %}
</body>
</html>
Part1 과 같이 h tp://127.0.0.1:5000/그리고 x2 에 액세스 해 다음이 표시되고 있으면 성공이다.
Flask チュートリアル
名前: Yoshizaki
名前: Kikagaku
Bootstrap을 사용하여 편집
CSS (cascading style sheets) 프레임 워크 인 Bootstrap을 사용하여 index2.html을 다음과 같이 다시 씁니다.
Bootstrap은 자주 사용되는 스타일이 미리 정의되어 편리합니다. 코드는 여기 에서 인용했다.
index2.html
d<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content = "width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<!-- Bootstrap -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
</head>
<body>
<div class="container">
<div class="row">
<hl>Flask チュートリアル</hl>
<table class="table table-striped table-hover">
<thread>
<tr>
<th scope="col">#</th>
<th scope="col">Name</th>
<th scope="col">Age</th>
</tr>
</thread>
<tbody>
{% for user in users %}
<tr>
<td>{{user.id}}</td>
<td>{{user.name}}</td>
<td>{{user.age}}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</body>
</html>
마찬가지로 htp://127.0.0.1:5000/그리고 x2에 액세스하여 다음이 표시되면 성공합니다.
참고
데이터 수집부터 웹 앱 개발까지 실천으로 배우는 기계 학습 활용 가이드 의 chapter 3-4-1 및 chapter 3-5
Reference
이 문제에 관하여(Flask를 이용한 데이터베이스 애플리케이션 제작 Part2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/keisuke-ota/items/b575f542bff6303ba4f1텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)