플라스크 – SQLite
Python에는 다음에 대한 내장 지원이 있습니다. SQlite. SQlite3 모듈은 Python 배포판과 함께 제공됩니다. Python에서 SQLite 데이터베이스를 사용하는 방법에 대한 자세한 자습서는 이 링크 를 참조하십시오 . 이 섹션에서는 Flask 애플리케이션이 SQLite와 상호 작용하는 방식을 살펴 보겠습니다.
SQLite 데이터베이스 만들기 ‘database.db’ 그 안에 학생용 테이블을 만듭니다.
import sqlite3
conn = sqlite3.connect('database.db')
print "Opened database successfully";
conn.execute('CREATE TABLE students (name TEXT, addr TEXT, city TEXT, pin TEXT)')
print "Table created successfully";
conn.close()
Flask 애플리케이션에는 View 기능.
먼저 new_student() 함수는 URL 규칙에 바인딩됩니다. (‘/addnew’). 학생 정보 양식이 포함 된 HTML 파일을 렌더링합니다.
@app.route('/enternew')
def new_student():
return render_template('student.html')
HTML 스크립트 ‘student.html’ 다음과 같습니다-
<html>
<body>
<form action = "{{ url_for('addrec') }}" method = "POST">
<h3>Student Information</h3>
Name<br>
<input type = "text" name = "nm" /></br>
Address<br>
<textarea name = "add" ></textarea><br>
City<br>
<input type = "text" name = "city" /><br>
PINCODE<br>
<input type = "text" name = "pin" /><br>
<input type = "submit" value = "submit" /><br>
</form>
</body>
</html>
보시다시피 양식 데이터는 ‘/addrec’ 바인딩하는 URL addrec() 함수.
이 addrec() 함수는 다음을 통해 양식의 데이터를 검색합니다. POST방법 및 학생 테이블에 삽입합니다. 삽입 작업의 성공 또는 오류에 해당하는 메시지가 렌더링됩니다.‘result.html’.
@app.route('/addrec',methods = ['POST', 'GET'])
def addrec():
if request.method == 'POST':
try:
nm = request.form['nm']
addr = request.form['add']
city = request.form['city']
pin = request.form['pin']
with sql.connect("database.db") as con:
cur = con.cursor()
cur.execute("INSERT INTO students (name,addr,city,pin)
VALUES (?,?,?,?)",(nm,addr,city,pin) )
con.commit()
msg = "Record successfully added"
except:
con.rollback()
msg = "error in insert operation"
finally:
return render_template("result.html",msg = msg)
con.close()
HTML 스크립트 result.html 이스케이프 문 포함 {{msg}} 결과를 표시하는 Insert 조작.
<!doctype html>
<html>
<body>
result of addition : {{ msg }}
<h2><a href = "\">go back to home page</a></h2>
</body>
</html>
응용 프로그램에 다른 list() 로 표현되는 기능 ‘/list’URL. 채우기‘rows’ 로 MultiDictstudent 테이블의 모든 레코드를 포함하는 개체. 이 개체는list.html 주형.
@app.route('/list')
def list():
con = sql.connect("database.db")
con.row_factory = sql.Row
cur = con.cursor()
cur.execute("select * from students")
rows = cur.fetchall();
return render_template("list.html",rows = rows)
이 list.html 행 세트를 반복하고 HTML 테이블의 데이터를 렌더링하는 템플릿입니다.
<!doctype html>
<html>
<body>
<table border = 1>
<thead>
<td>Name</td>
<td>Address>/td<
<td>city</td>
<td>Pincode</td>
</thead>
{% for row in rows %}
<tr>
<td>{{row["name"]}}</td>
<td>{{row["addr"]}}</td>
<td> {{ row["city"]}}</td>
<td>{{row['pin']}}</td>
</tr>
{% endfor %}
</table>
<a href = "/">Go back to home page</a>
</body>
</html>
마지막으로 ‘/’ URL 규칙은 ‘home.html’ 애플리케이션의 진입 점 역할을합니다.
@app.route('/')
def home():
return render_template('home.html')
다음은 전체 코드입니다. Flask-SQLite 신청.
from flask import Flask, render_template, request
import sqlite3 as sql
app = Flask(__name__)
@app.route('/')
def home():
return render_template('home.html')
@app.route('/enternew')
def new_student():
return render_template('student.html')
@app.route('/addrec',methods = ['POST', 'GET'])
def addrec():
if request.method == 'POST':
try:
nm = request.form['nm']
addr = request.form['add']
city = request.form['city']
pin = request.form['pin']
with sql.connect("database.db") as con:
cur = con.cursor()
cur.execute("INSERT INTO students (name,addr,city,pin)
VALUES (?,?,?,?)",(nm,addr,city,pin) )
con.commit()
msg = "Record successfully added"
except:
con.rollback()
msg = "error in insert operation"
finally:
return render_template("result.html",msg = msg)
con.close()
@app.route('/list')
def list():
con = sql.connect("database.db")
con.row_factory = sql.Row
cur = con.cursor()
cur.execute("select * from students")
rows = cur.fetchall();
return render_template("list.html",rows = rows)
if __name__ == '__main__':
app.run(debug = True)
Python 셸에서이 스크립트를 실행하고 개발 서버가 실행되기 시작합니다. 방문http://localhost:5000/ 다음과 같은 간단한 메뉴를 표시하는 브라우저에서-
딸깍 하는 소리 ‘Add New Record’ 링크를 여는 Student Information 형태.
양식 필드를 채우고 제출하십시오. 기본 함수는 students 테이블에 레코드를 삽입합니다.
홈페이지로 돌아가서 ‘Show List’링크. 샘플 데이터를 보여주는 표가 표시됩니다.