상세 컨텐츠

본문 제목

페이지네이션 추가

pymysql

by bumychoi 2025. 5. 6. 01:49

본문

 

 

import pymysql
from flask import Flask,request,render_template,abort,url_for,redirect

app=Flask(__name__)

conn =pymysql.connect(
    host="127.0.0.1",
    user="root",
    passwd="cb02077075",
    db='mylist',
    charset = "utf8",
    autocommit = True
)
cur= conn.cursor()

@app.route("/list")
def lists():
    page =request.args.get("page",default=1,type=int)
    #한페이지당 몇개의 값
    limit = request.args.get("limit",10,type=int)
    offset = (page -1) * limit

    #페이지 적용한 쿼리리
    cur.execute("SELECT * FROM userTable LIMIT %s OFFSET %s",(limit,offset))
    rows = cur.fetchall()
    columns = [desc[0] for desc in cur.description]
    datas = [dict(zip(columns, row)) for row in rows]


    #전체 개수 확인(페이수 수계산용)
    cur.execute("SELECT COUNT(*) FROM userTable")
    total = cur.fetchone()[0]
    total_pages = (total +limit-1) //limit #전체페이수

    return render_template("list.html",
                           datas=datas,
                           page=page,
                           limit=limit,
                           total_pages=total_pages)



@app.route("/write",methods=["GET","POST"])
def board_write():
    if request.method == "POST":
        user_id = request.form.get("user_id")
        userName = request.form.get("userName")
        email = request.form.get("email")
        birthYear= request.form.get("birthYear")
        sql = ("INSERT INTO userTable(user_id,userName, email,birthYear) VALUES(%s,%s,%s,%s)")

        cur.execute(sql,(
            user_id,
            userName,
            email,
            birthYear
        ))
        x=cur.lastrowid #키값받기
        return redirect(url_for("board_view",idx=x))
    else:
        return render_template("write.html")

@app.route("/view/<idx>")
def board_view(idx):
    # idx=request.args.get("idx")
    if idx is not None:
        try:
            idx = int(idx)
            cur.execute("SELECT * FROM userTable WHERE number=%s",(idx,)) #콤마필수
           
            row = cur.fetchone()
            # print(row)
            if row is not None:
                result={
                "number":row[0],
                "user_id":row[1],
                "userName":row[2],
                "email":row[3],
                "birthYear":row[4]}

                # print(f'번호:{nu} 아이디:{data2} 이름:{data3} 이메일:{data4} 출생연도:{data5}')
                return render_template("view.html",result=result)

        except ValueError:
            return "잘못된 번호 형식입니다."

    return "해당내용이 없습니다."

       
if __name__ == "__main__":
    app.run(debug=True,port=9000)
 

 

run.py

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>리스트</title>
</head>

<body>
    {% if datas|length > 0 %}
    <table>
        <thead>
            <tr>
                <td>번 호</td>
                <td>아이디</td>
                <td>이 름</td>
                <td>이메일</td>
                <td>출생연도</td>
            </tr>
        </thead>
        <tbody>
            <!-- 반복되는 구간간 -->
            {% for item in datas%}
            <tr>
                <td>{{loop.index +((page -1)*limit)}}</td>
                <td><a href="{{url_for('board_view',idx=item.number)}}">{{item.user_id}}</a></td>
                <td><a href="{{url_for('board_view',idx=item.number)}}">{{item.userName}}</a></td>
                <td><a href="{{url_for('board_view',idx=item.number)}}">{{item.email}}</a></td>
                <td>{{item.birthYear}}</td>
            </tr>
            {% endfor %}
            <!-- 반복되는 구간끝 -->
        </tbody>
    </table>
    <div>
        {% if page > 1 %}
        <a href="/list?page={{ page - 1 }}">이전</a>
        {% endif %}

        페이지 {{ page }} / {{ total_pages }}

        {% if page < total_pages %} <a href="/list?page={{ page + 1 }}">다음</a>
            {% endif %}
    </div>
    {% else %}
    <h2>데이터가 없습니다.</h2>
    {% endif %}
</body>

</html>

 

list.html

 

'pymysql' 카테고리의 다른 글

flask+jinja2 list 만들기  (0) 2025.05.06
flask + mysql +jinja2 웹사이트 만들기 -1단계 저장, 상세보기  (0) 2025.04.29
pymysql CRUD  (0) 2025.04.29
tkinter 보완(입력시 리셋)  (0) 2025.04.28
tkinter+sql  (0) 2025.04.28

관련글 더보기