본문 바로가기

문돌이 존버/DB 및 SQL 스터디

윈도우 terminal 및 파이썬 MySQL DB 생성, 데이터 입력

반응형

윈도우의 경우, MySQL이 설치된 경로는 아마도 다음과 같을 것입니다. 

C:Program Files/MySQL/MySQL Server 8.0/bin

따라서 윈도우 터미널에서 위의 디렉토리로 이동해야 합니다. 이후에는 아래와 같이 MySQL을 실행하고 임의의 데이터베이스와 유저를 생성해줍니다. IDENTIFIED BY 뒤에는 패스워드를 입력하면 됩니다. 

./mysql -u root -p
CREATE DATABASE crawl_data DEFAULT CHARACTER SET utf8;
CREATE USER crawl_user IDENTIFIED BY '****';
GRANT ALL ON crawl_data.* TO crawl_user;

위에서 만든 데이터베이스에 테이블을 추가해봅시다. 아래와 같이 터미널에 명령어를 입력해주면 테이블이 생성되며, 저는 이미지 데이터를 BLOB 타입이 아닌 파일 타입으로 만들었습니다. 장고에서 ImageField()를 사용하면 파일로 처리할 수 있기 때문에 이미지가 저장된 경로만 입력하면 되거든요. (주의!!) 아래 `` 표시를 잘 보시기 바랍니다. 작은 따옴표가 아닌 키보드 숫자 1 왼쪽에 있는 특수 문자입니다.

use crawl_data; # crawl_data 데이터베이스 사용
create table `crawl_table`(
    `num` int(11) NOT NULL,
    `title` char(20) NOT NULL,
    `url` char(255) NOT NULL,
    `image` char(50) NOT NULL,
    `date` datetime() NOT NULL,
    PRIMIARY KEY (`num`)
)  ENGINE=InnoDB DEFAULT CHARSET=utf8;

데이터베이스, 테이블이 잘 만들어졌는지 보려면 아래의 명령어로 확인하면 됩니다.

show databases;
show tables;
desc 'crawl_table'; # 테이블 필드 설정 확인

테이블에 필드를 추가하기 위해선 새로 추가할 필드명과 타입만 정해주면 됩니다. 아래 명령어를 확인하시면 "date"라는 필드명의 타입은 "datetime"이며 "img" 필드 뒤에 추가할 것임을 알 수 있습니다. 기존 필드명을 입력하지 않으면 디폴트로 마지막 필드 뒤에 추가됩니다. 

alert table <테이블명> add <필드명> <필드 타입> after <기존 필드명>;
alert table crawl_table add date datetime after img;

마음에 들지 않는 필드 역시 삭제할 수 있습니다.

alter table crawl_table drop date;

필드를 삭제하는 대신 수정도 할 수 있습니다. 기존 필드명과 수정할 필드명을 차례로 입력하면 됩니다.

alter table <테이블명> change <기존 필드명> <수정 필드명> <필드 타입>
alter table crawl_table change date written_at datetime;

아래는 파이썬을 통해 MySQL과 연결하고 쿼리를 던지는 코드 예시입니다. cursor()을 통해 SQL 쿼리문을 그대로 동작시킬 수 있습니다. 

import MySQLdb

# MySQL과 연결
conn = MySQLdb.connect(
    user="crawl_user",
    passwd="****",
    host="localhost",
    db="crawl_data",
    charset="utf8"
)
#print(type(conn))

# MySQL에 명령어를 전달해주는 커서
cursor = conn.cursor()
#print(type(cursor))

"""
크롤링 코드 생략
"""
items = [item for item in zip(title_list, url_list, date_list)]
for item in items:
    cursor.execute("""INSERT INTO news(title, url, date) VALUES('""" + item[0] + """', '""" + item[1] + """', '""" + item[2] + """')""")

# 커서 내용을 db에 커밋
conn.commit()

# 연결 종료
conn.colse()

위에서 MySQLdb 모듈을 임포트하는데 오류가 난다면 mysqlclient를 먼저 설치하셔야 합니다.

pip install mysqlclient
728x90
반응형