pymysql로 DB 밀어넣기

브랜디 인턴십으로 프로젝트를 진행중입니다.

오늘은 aquery를 이용해 모델링을 한 스키마들을 pymysql을 이용해 몫데이터로 만들어 프론트에게 주는 작업을 하려고 합니다.

aquery로 DB모델링 짠 후 아래 디스크를 누르면
모든 테이블 SQL생성을 누르면 TXT파일에 SQL문으로 만들어집니다.
txt파일의 내용을 복사해 원하는 경로에 파일을 생성해 '파일이름.sql'로 이름을 저장합니다.

내 local에서 database를 생성해줍니다.
먼저, mysql에 접속합니다.

mysql -u root

그리고 데이터베이스를 생성해줍니다.

create database brandi(원하는 이름으로 하기) character set utf8mb4 collate utf8mb4_general_ci;

만약, AWS에서 RDS를 이용했던 분들이라면 Local database에 dump처리하는 것을 알 수 있습니다.
저는 아래와 같이 명령어를 쳐서 db파일을 올렸습니다.

mysql -u root -p brandi < script.sql(sql이름)

몫데이터로 총 20개의 seller계정을 만들고자 했습니다.
그런데, 아무리 해도 아래와 같은 오류가 나지만, 해결하려고 발버둥을 쳤지만 결국 답은 모델링부터 문제였습니다....


한 테이블에서 수정자 아이디 컬럼이 pk에 fk를 주었기 때문에 생긴 오류였습니다. 이 오류를 맞이하고부터 오늘 하루를 날려버렸습니다ㅠㅠ

오류 해결 방법: 제약조건 삭제하기

alter table 테이블명 drop constraint 제약조건명;

결과확인해보기

  • sellers테이블 select
  • select한 결과
  • 총 sellers테이블에 들어간 id값 확인

end

import pymysql
import numpy as np
import bcrypt


password = 'hello1234'

conn = pymysql.connect(
    host='localhost',
    user='root',
    password='',
    db='brandi',
    charset='utf8'
)
curs = conn.cursor()
sql = """INSERT INTO sellers (
            register_date,
            seller_status_id,
            is_master,
            is_deleted,
            seller_id,
            seller_account_id,
            english_name,
            korean_name,
            cs_phone,
            seller_property_id,
            profile_image,
            password,
            background_image,
            simple_description,
            detail_description,
            zip_code,
            address,
            detail_address,
            open_time,
            close_time,
            bank_id,
            account_number,
            account_name,
            shipping_information,
            exchange_refund_information,
            model_height,
            model_top_size,
            model_bottom_size,
            model_feet_size,
            shopping_feedtext,
            registered_product_count,
            created_at,
            expired_at,
            modifier_id
        ) VALUES (
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s,
            %s
    )
"""

for num in range(1,21):
    print(num)
    encode_password = bcrypt.hashpw(str('test'+password+'!').encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
    curs.execute(sql,(
        '2020-09-21 13:39:20', #register_date
        '1', #seller_status_id
        '1', #is_master
        '0', #is_deleted
        str(num), #seller_id
        'seller'+str(num), #seller_account_id
        'leejiyeon'+str(num), #english_name
        '이지연'+str(num), #korean_name
        '02-123-4500', #cs_phone
        '1', #seleer_property_id
        'https://image.brandi.me/cproduct/2020/01/17/13216968_1579243036_image1_L.jpg', #profile_image
        encode_password, #password
        'https://image.brandi.me/cproduct/2020/01/17/13216968_1579243036_image1_L.jpg', #background_image
        '안녕하세요'+str(num), #simple_desc
        '안녕하세요.상세페이지입니다.'+str(num), #detail_desc
        '041-300', #zip_code
        '서울특별시 강남구 테헤란로 32길 263 청송빌딩', #address
        '역삼 브랜디', #detail_addr
        "10:00", #open_time
        "18:00", #close_time
        '1', #bank_id
        '02-45730203-09', #account_number
        '이지연'+str(num), #account_name
        '도서산간 지역은 배송비가 추가비용이 발생할 수 있으며, 그 외 지역은 무료배송입니다.', #shipping_info
        '브랜디는 소비자보호법 및 전자상거래법을 기반한 환불보장제를 운영 중에 있습니다.', #exchange_refund_info
        '170', #model_high
        '55', #top_size
        '55', #bottom_size
        '250', #feet_size
        '안녕하세요! 가을에 어울리는 신상이 100개 입고되었습니다.', #shopping_feedtext
        '30', #regi_prod_count
        '2020-09-21 13:39:20', #create_At
        '9999-12-31 23:59:59', #expired_at
        '1' #modifier_id
        ))
conn.commit()
conn.close()

좋은 웹페이지 즐겨찾기