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

매출이 오르면 내리는 수수료! 지금 수수료센터에서 전자결제(PG)수수료 비교견적 신청해 보세요!
파이썬을 이용한 엑셀 내용 업로드 질문입니다.

QA

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

본문


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)

 

답변을 작성하시기 전에 로그인 해주세요.
전체 209
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT