데이터베이스(db)/SQLite

[Python] flask와 sqlite 연동 검색(GET, response)

끄적끄적아무거나 2022. 11. 8. 08:59
반응형

 

목차

     

     

     

    [Python] flask와 sqlite 연동 검색 기본 준비

    앞서 시간에는 flask와 sqlite를 연동(Connect)해서 flask의 웹서버를 가동해서 웹 브라우져(web browser)에서 sqlite의 데이터베이스(DB, Database)에 있는 내용을 모두 읽어 오는 예제를 시행해 보았습니다(https://scribblinganything.tistory.com/619). 동일 내용을 라즈베리파이(Raspberry Pi) 리눅스 환경에서도 시행한 예제가 있으니 궁금하시면 참조 하세요

     

    이번 포스트에서는 REST API 를 중에 GET 을 사용해서 웹 페이지(Web Page)에 특정 id 값을 입력 하고 해당 id에 해당하는 데이터 베이스 값을 검색(Search) 하고 이를 페이지에 출력하는 예제 입니다.

     

    혹시 REST API에 대한 내용을 잘 모르 신다면 링크를 참조 하세요(https://scribblinganything.tistory.com/162)

     

    기본 구조는 앞서 윈도우 파이썬에서 실행한 코드와 동일 합니다. 다만 메인 파이썬 코드에서 sql_search(id)라는 함수만 추가 하였습니다. 전체 코드는 아래와 같습니다.

     

     

    현재 SQLite DB에 저장된 값>>

     

     

     

     

    sql_read.html>>

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>sql_read</title>
    </head>
    <body>
        <table border="1"> 
            <tr>
                <th>ID</th>
                <th>이름</th>
                <th>주소</th>
            </tr>
            {% for item in items %}
            <tr>
                <td>{{ item.id }}</td>
                <td>{{ item.name }}</td>
                <td>{{ item.addr }}</td>
            </tr>
            {% endfor %}
        </table>    
    </body>
    </html>

     

     

     

    메인 파이썬 코드>>

    from flask import Flask, render_template, abort, jsonify
    from flask_sqlalchemy import SQLAlchemy
    
    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///D:\\Python\\test04\\company.db'
    # app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////home/fam/linux_test/flask_test/company.db'
    db = SQLAlchemy(app)
    
    class employee(db.Model):
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String, unique=True, nullable=False)
        addr = db.Column(db.String)
    
        def __init__(self, id=1, name=None, addr=None):
            self.id = id
            self.name = name
            self.addr = addr
    
        def __repr__(self):
            return '<%r, %r>' % (self.name,self.addr)
    
    @app.route('/sql_search/<id>')
    def sql_search(id):
        db_value = db.session.execute("SELECT * from employee where id like "+"'%"+id+"%'").fetchall() 
        if db_value:
            return render_template('sql_read.html', items=db_value)
        return abort(404, "no database") 
    
    @app.route('/sql_read')
    def sql_read():
        db_value = db.session.query(employee).all()
        if db_value:
            return render_template('sql_read.html', items=db_value)
        return abort(404, "no database")    
    
    @app.route('/')
    def hello_fnc():
        return "Hello"
    
    if __name__ == "__main__":
        app.run(host='0.0.0.0', debug=True, port=9999)

     

     

     

     

     

    [Python] flask와 sqlite 연동 검색 예제 실습 및 분석

     

    html이나 DB에 대해서는 앞에서 이미 소개를 하였기 때문에 파이썬(Python) 코드 중에 sql_read 부분에 대한 설명만 추가하겠습니다.

     

    @app.route('/sql_search/<id>')
    def sql_search(id):
        db_value = db.session.execute("SELECT * from employee where id like "+"'%"+id+"%'").fetchall() 
        if db_value:
            return render_template('sql_read.html', items=db_value)
        return abort(404, "no database")

    1번 라인: <id> 값을 사용해서 웹 주소를 입력과 함께 id 값이 넘어가게 됩니다. 해당 구문은 GET으로 전달 됩니다.

    2번 라인: id 값을 sql_search 함수로 넘겨 줍니다.

    3번 라인: SQLite 의 where 명령어를 사용해서 해당 id 내용을 찾아 줍니다.

     

     

    결과>>

    정상적으로 2번 id에 대한 값을 출력 하였습니다.

     

     

     

     

    반응형