본문 바로가기

데이터 베이스/SQL

[미완성]python 채팅 프로그램을 위한 DB SQL 테이블(2024-03-11)

from bs4 import BeautifulSoup #데이터 패싱을 위한 모듈 설치
import sqlite3 #SQL형태의 DB 모듈 설치를 위해 생성
from sqlite3 import Error #DB의 Erorr 모듈 설치
import time #실시간 데이터를 받아오기 위한 모듈 설치

# SQLite 데이터베이스 생성 또는 연결하는 함수
def create_connection(db_file):
    try:
        conn = sqlite3.connect(db_file) #기존 데이터베이스 파일과 연결 시도
        return conn #연결 성공시 연결한 DB 데이터베이스 안의 값을 반환
    except Error as e: #eroor 입력하기 귀찮으니 e 라는 변수변환
        print(e) #오류 출력
        return None #리턴값 0==오류출력

#채팅 데이터중 참여 맴버 저장하기 위한 DB 생성함수
def create_chat_member_table(conn):
    create_table_sql = """
    CREATE TABLE IF NOT EXISTS chat_member (
        PRIMARY KEY chat_name TEXT,
        passward TEXT, 
        chat_code TEXT,
        chat_log TEXT,
        timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
    );
    """
    # 테이블 안에 가격이 포함됐을경우
    # 테이블을 구분하는 핵심 키(닉네임)
    # 패스워드
    # 계정 코드
    # 채팅 내용
    # 채팅을 입력한 시간(DATETIME)
    try:
        cursor = conn.cursor() #연결한 DB에 커서 생성
        cursor.execute(create_table_sql) #위에서 설정한 스키마 구조대로 DB 테이블 생성
    except Error as e:#에러가 있으면
        print(e)#에러출력

# 채팅 내용과 동시에 그것을 입력한 대상의 정보를 데이터베이스에 삽입하는 함수
def insert_member_info(conn, chat_name,passward,chat_log):
    insert_sql = """
    INSERT INTO chat_member(chat_name,passward,chat_log) 
    VALUES (?, ?, ?);
    """#변수가 실제 저장될 값 개수만큼 공간을 할당해줘야 함
    try:
        cursor = conn.cursor() #커서 접속
        cursor.execute(insert_sql, (chat_name,passward,chat_log)) #sql구조대를 받아와서 거기에 받아온 변수대로 입력
        conn.commit() #데이터 처리 끝낸 후 전송
    except Error as e:
        print(e)

# 채팅 내용을 개별 파일(사용자별)로 저장하는 함수
def save_chat_log(chat_name, chat_log):
    filename = f"{chat_name}_log.txt"
    with open(filename, 'a') as file:
        file.write(chat_log + '\n')
    print(f"Chat log saved for {chat_name}.")


if __name__ == "__main__":
    # 데이터베이스 파일 경로
    database = "chat_data.db"

    # 데이터베이스 연결
    conn = create_connection(database)

    if conn is not None:
        # 채팅 맴버 테이블 생성
        create_chat_member_table(conn)

        # 사용자로부터 채팅 이름과 비밀번호 입력 받기
        chat_name = input("Enter your chat name: ")
        password = input("Enter your password: ")

        # 채팅 내용을 입력받아서 개별 파일로 저장하고 데이터베이스에 삽입
        while True:
            chat_log = input("Enter your chat log (type 'exit' to end): ")
            if chat_log.lower() == 'exit':
                break
            chat_code = input("Enter chat code: ")
            save_chat_log(chat_name, chat_log)
            insert_member_info(conn, chat_name, password, chat_code, chat_log)

        # 연결 종료
        conn.close()
    else:
        print("Error! cannot create the database connection.")