#!/usr/bin/python # -*- coding: utf-8 -*- import pymysql from time import localtime, strftime # MySQL 설정 db_addr = 'localhost' db_user = 'test' db_password = 'password' db_name = 'test' # MySQL Connection 연결 conn = pymysql.connect(host=db_addr, user=db_user, password=db_password, db=db_name, charset='utf8') # Connection 으로부터 Cursor 생성 curs = conn.cursor() # SQL문 실행 - rx_sequence 현재값 def get_last_rx_sequence(): rx_sequence_sql = "SELECT `seq` FROM `rx_sequence` ORDER BY `seq` DESC limit 1" curs.execute(rx_sequence_sql) # 데이타 Fetch rx_sequence_sql_rows = curs.fetchall() rx_sequence = rx_sequence_sql_rows[0][0] return rx_sequence # 현재 rx_sequence_sql의 값 print(get_last_rx_sequence()) # rx_sequence_sql_rows의 값을 증가시킴 # 증가된 rx_sequence = 새로 생길 document_srl가 될 것임 # rx_sequence_sql_rows 현재값에 1을 추가 new_rx_sequence_rows = int(get_last_rx_sequence() + 1) print(new_rx_sequence_rows) # SQL문 실행 - DB rx_sequence 현재값에 1을 추가 rx_sequence_inser_sql = """INSERT INTO `rx_sequence` (seq) VALUES (%s);""" curs.execute(rx_sequence_inser_sql, (new_rx_sequence_rows)) conn.commit() # 게시물 입력정보 document_srl = get_last_rx_sequence() module_srl = "68" member_srl = "4" user_name = "admin" nick_name = "운영자" cTime = strftime("%Y%m%d%H%M%S", localtime()) title = "제목" content = "내용" tags = "tt,tdf,tdfd,wrf,dfsf" rx_document_inser_sql = """INSERT INTO `rx_documents` (`document_srl`, `module_srl`, `title`, `content`, `member_srl`, `regdate`, `last_update`, `category_srl`, `lang_code`, `is_notice`, `title_bold`, `title_color`, `readed_count`, `voted_count`, `blamed_count`, `comment_count`, `trackback_count`, `uploaded_count`, `password`, `user_id`, `user_name`, `nick_name`, `email_address`, `homepage`, `tags`, `extra_vars`, `last_updater`, `ipaddress`, `list_order`, `update_order`, `allow_trackback`, `notify_message`, `status`, `comment_status`) VALUES (%s, %s, %s, %s, %s, %s, %s, '0', 'ko', 'N', 'N', 'N', '0', '0', '0', '0', '0', '0', NULL, NULL, %s, %s, '', '', %s, NULL, NULL, '', %s, %s, 'N', 'N', 'PUBLIC', 'ALLOW');""" curs.execute(rx_document_inser_sql, (document_srl, module_srl, title, content, member_srl, cTime, cTime, user_name, nick_name, tags, -document_srl, -document_srl)) conn.commit() # `list_order` 와 `update_order`는 document_srl의 역순으로 입력하면 됨.
출처 : https://godpeople.or.kr/3417038
팁 소개도 하면서 질문도 하려고 합니다.
해당 소스는 파이썬으로 라이믹스 게시물을 직접 입력하는 방법입니다.
제가 인터넷에 떠도는 소스를 수정해서 document_srl 문제를 해결하였습니다.
라이믹스의 구조를 이해하는데 많은 도움이 되었는데요. 아직 해결하지 못한 게 있습니다.
문제는 이미지나 파일을 첨부하려고 할 때 입니다.
파일 업로드와 디비 입력에서 기존 라이믹스의 파일처리 방식을 몰라서 첨부파일 부분은 손을 못데고 있습니다.
경험이 있으신 분의 손길을 기다려 봅니다.
혹시, 힌트라도 주시면 계속 도전해 보겠습니다.
감사합니다.
파이썬 공부용이라면 말리지 않겠지만... XE나 라이믹스의 구조를 이해하는 것이 목표라면 파이썬보다는 PHP로 공부하시는 것이 훨씬 편할 것 같네요. common/autoload.php 파일만 인클루드하면 DocumentController, FileController 등 작업에 필요한 모든 클래스를 자유롭게 끌어다 쓸 수 있으니까요. 라이믹스는 코어에서 제공하는 클래스와 함수를 통하지 않고 글, 댓글, 파일 등을 직접 조작하는 것을 절대 권장하지 않습니다.
예:
#!/usr/bin/php
<?php
include 'common/autoload.php';
$obj = new stdClass;
$obj->속성 = 값; // 필요에 따라 반복
getController('document')->insertDocument($obj, true);
이렇게 하면 시퀀스 같은 것은 모두 알아서 들어가고, 새 글이 등록되었을 때 특정인에게 알림이 날아가야 한다거나, 글쓴이에게 포인트를 준다거나, 그 밖에 해당사이트에 설치된 서드파티 자료들이 수행하는 각종 기능들도 모두 정상적으로 수행됩니다. DB에 직접 입력하면 이런 건 어림도 없죠.
힌트를 드리자면 파일도 마찬가지로 시퀀스 값을 뽑아서 file_srl에 넣고, 소속된 문서의 document_srl을 참조합니다. 저장하는 경로도 임의로 생성해서 uploaded_filename 필드에 넣고요. 실제로 파일 몇 개 첨부해 놓고 rx_files 테이블과 files/attach 폴더 내의 서브폴더 구조를 살펴보면 무척 직관적일 거예요.
P.S. 글 내용에 '따옴표'가 들어가면 어떻게 될까요? ㅎㅎ 기왕 공부하시는 거, prepared statement 사용법을 함께 공부해서 처음부터 제대로 배워두세요^^