파이썬을 이용한 엑셀 내용 업로드 질문입니다.

파이썬을 이용한 엑셀 내용 업로드 질문입니다.

QA

파이썬을 이용한 엑셀 내용 업로드 질문입니다.

답변 1

본문


import pymysql, openpyxl
from datetime import datetime
 
 
def board_write(board, subject, content, wr_link1, mb_id, nickname):
    try:
        # MySQL connection 및 cursor 생성
        conn = pymysql.connect(host = '####.####.com',
                            user = '#####',
                            password = '#####',
                            db = '#####',
                            charset = 'utf8')
        curs = conn.cursor()
   
        # 작성글 INSERT
        sql = f"select wr_num from g5_write_{board}"    
        curs.execute(sql)
        wr_num = str(int(curs.fetchone()[0]) - 1)
        now = datetime.today().strftime('%Y-%m-%d %H:%M:%S') # 그누보드의 날짜 형식 준수 (ex: 2021-04-05 23:45:15)
        sql = f"insert into g5_write_{board} set wr_num = {wr_num}, \
            wr_reply = '', wr_comment = 0, ca_name = '', wr_option = 'html1', wr_subject = '{subject}', \
            wr_content = '{content}', wr_link1 = '{wr_link1}', wr_link2 = '', \
            wr_link1_hit = 0, wr_link2_hit = 0, wr_hit = 1, wr_good = 0, wr_nogood = 0, \
            mb_id = '{mb_id}', wr_password = '', wr_name = '{nickname}', wr_email = '', wr_homepage = '', \
            wr_datetime = '{now}', wr_last = '{now}', wr_ip = '111.111.111.111', \
            wr_1 = '', wr_2 = '', wr_3 = '', wr_4 = '', wr_5 = '', \
            wr_6 = '', wr_7 = '', wr_8 = '', wr_9 = '', wr_10 = ''"
        curs.execute(sql)
   
        # 부모 아이디에 UPDATE
        sql = f"select wr_id from g5_write_{board}"
        curs.execute(sql)
        wr_id = str(curs.fetchall()[-1][0])
        sql = f"update g5_write_{board} set wr_parent = {wr_id} where wr_id = {wr_id}"
        curs.execute(sql)
   
        # 새글 INSERT
        sql = f"insert into g5_board_new ( bo_table, wr_id, wr_parent, bn_datetime, mb_id ) values \
            ( '{board}', '{wr_id}', '{wr_id}', '{now}', '{mb_id}' )"
        curs.execute(sql)
   
        # 게시글 1 증가
        sql = f"select bo_count_write from g5_board where bo_table = '{board}'"
        curs.execute(sql)
        bo_count_write = str(int(curs.fetchone()[0]))
        sql = f"update g5_board set bo_count_write = {bo_count_write} + 1 where bo_table = '{board}'"
        curs.execute(sql)
   
        # MySQL connection 닫기
        conn.close()
        print(f"게시글 등록 성공: {subject}")
    except Exception as e:
        print(f"게시글 등록 실패: {e}")
 
    return
 
 
def read_xlsx(filename):
    wb = openpyxl.load_workbook(filename)
    sh = wb['Sheet1']
    data = []
    for i in range(sh.max_row): # XLSX 파일 길이만큼 반복문을 수행합니다.
        temp = []
        for j in range(1, 4):
            cv = sh.cell(row=i+1, column=j).value
            temp.append(cv) if not cv is None else temp.append('') # None을 ''로 처리합니다.
        data.append(temp)
    return data
 
 
def main():
    result_list = read_xlsx('C:/py/py/test.xlsx')
    board = 'free'
    mb_id = 'test'
    nickname = '테스트계정'
    for r in result_list:
        board_write(board, r[0], r[1], r[2], mb_id, nickname)
 
 
if __name__ == "__main__":
    main()

 

위 코드는 https://sir.kr/g5_tip/16249 게시글 작성자인 Innisfree 님의 글을 보고 카피한 내용입니다.

 

해당코드를 실행하였을 때, 오류는 나지 않지만 해당 자유게시판(free)에 글이 보이지 않습니다.

 

3537789662_1703867882.0906.png

최신글 보기를 하면 위와 같이 나옵니다. 01:37 글은 제가 수기로 입력한 게시글이고 나머지가 문제의 게시글입니다. 저기서 체크하고 삭제를 해도 글이 사라지지 않고, 더 큰 문제는 해당 게시판에 직접 들어가보면

3537789662_1703867924.4252.png

위와 같이 1~4번 게시글이 없는걸 확인할 수 있습니다.

mysql 에 들어가서 해당 테이블에서 직접 삭제를 해줘야 글이 사라지는 것 같습니다.

 

이게 무슨 오류때문에 이렇게 되는걸까요?

 

코드는 큰 수정없이 db 계정 등만 수정한 상태입니다. 

 

 

이 질문에 댓글 쓰기 :

답변 1

wr_num값이 잘못 들어갈 것으로 보입니다

파이썬 코드로 하지말고 update 코드가 들어있는 php를 호출하고

데이터를 넘겨주는 방법이 쉬울텐데요

write_update.php를 이용해서 pywrite_update.php를 만들고 다음처럼 해보세요

변수명은 그누보드에서 사용하는 변수명 그대로....

 

import requests

~

 postdata = {'bo_table': board,'mb_id': mb_id, 'wr_name': nickname, 'wr_subject': subject ~~~}

 url = 'http://127.0.0.1/pywrite_update.php'
 response = requests.post(url, data=postdata )
 if response.status_code == 200 : print(response.text)

 

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 209
© SIRSOFT
현재 페이지 제일 처음으로