터미널에서 CSV 데이터를 SQL 데이터베이스로 가져오기

6366 단어 sqlcsvdatascience
데이터 과학자와 같은 공간의 여러 전문가는 여러 소스의 데이터로 작업합니다. CSV 파일에서 SQL 데이터베이스로 데이터를 가져오는 문제에 직면하는 데는 오랜 시간이 걸리지 않습니다. 나는 터미널의 열렬한 팬이므로 터미널에서하는 방법을 보여 드리고자합니다.

전제 조건



이를 위해 Python 패키지를 사용할 것입니다. 가상 환경에서 작업하는 것이 좋습니다. The Real Python's 가상 환경에 대한 기사는 필요한 경우 좋은 리소스입니다. 나는 당신이 Python3을 사용하고 있다고 가정합니다.
  • 필요한 패키지 설치

  • pip install PyMySQL psycopg2 csvkit
    


    PyMySQL: 이것은 Python을 사용하여 MySQL 데이터베이스에 연결하는 데 도움이 되는 순수한 Python MySQL 드라이버입니다.
    psycopg2: 가장 널리 사용되는 Python용 Postgresql 데이터베이스 어댑터입니다.
    csvkit: CSV로 변환하고 CSV로 작업하기 위한 명령줄 도구 모음입니다. CSV 파일에서 데이터를 가져오는 데 사용할 csvsql 모듈을 제공합니다.
  • 샘플 CSV 파일customer_info.csv을 다운로드합니다.

  • 이 튜토리얼을 위해 내가 소개하는 이 도구를 테스트하는 데 사용할 수 있는 일부 고객 정보가 포함된 CSV 파일을 업로드했습니다. 다운로드하려면 여기link를 클릭하세요.
  • 새 MySQL 또는 Postgresql 데이터베이스를 생성합니다. 나는 내 시험의 이름을 지었다. 데이터는 내가 customer_info라고 명명한 테이블로 가져올 것입니다.

  • 데이터 가져오기


    빠른 접근.



    이 접근 방식은 CSV 데이터에서 스키마를 자동으로 생성하고, 테이블을 생성하고, 데이터를 테이블에 삽입합니다.
    db_user: 생성한 테스트 데이터베이스에 대한 액세스 권한이 있는 데이터베이스 사용자입니다.
    비밀번호: 사용자의 비밀번호입니다.

    MySQL의 경우

    csvsql --db 'mysql+pymysql://db_user:password@localhost/test'  --tables customer_info --insert customer_info.csv
    


    PostgreSQL의 경우

    csvsql --db 'postgresql:///test' --tables customer_info  --insert customer_info.csv
    


    더 길고 안전한 접근 방식.


  • 터미널에서 customer_info 테이블을 생성하기 위한 쿼리를 생성합니다.

  • MySQL의 경우

    csvsql -i mysql customer_info.csv
    


    예상 결과:

    CREATE TABLE customer_info (
        `contractId` DECIMAL(38, 0) NOT NULL, 
        `AccountNumber` DECIMAL(38, 0) NOT NULL, 
        `CreatedAt` TIMESTAMP NULL, 
        `Amount` DECIMAL(38, 0) NOT NULL, 
        `Count` DECIMAL(38, 0) NOT NULL, 
        `Duration` DECIMAL(38, 0) NOT NULL
    );
    


    위의 결과는 테스트 데이터베이스에 customer_info 테이블을 생성하는 데 사용할 쿼리입니다. 생성된 스키마를 필요에 맞게 편집할 수 있습니다. 이 튜토리얼에서 그대로 두겠습니다.

    PostgreSQL의 경우

    csvsql -i postgresql
    


    예상 결과:

    CREATE TABLE customer_info (
        "contractId" DECIMAL NOT NULL, 
        "AccountNumber" DECIMAL NOT NULL, 
        "CreatedAt" TIMESTAMP WITHOUT TIME ZONE, 
        "Amount" DECIMAL NOT NULL, 
        "Count" DECIMAL NOT NULL, 
        "Duration" DECIMAL NOT NULL
    );
    


    각 데이터베이스가 쿼리를 예상하는 방식의 차이에 유의하십시오. MySQL은 작은 따옴표로 묶이지만 Postgresql은 큰 따옴표로 묶습니다.

    데이터를 테이블로 가져옵니다.



    MySQL에서

    csvsql --db 'mysql+pymysql://db_user:password@host/test' --no-create  --insert customer_info.csv
    


    PostgreSQL에서

    csvsql --db 'postgresql:///test' --no-create  --insert customer_info.csv
    


    요약



    우리는 csvkit 패키지를 사용하여 CSV 파일의 데이터를 MySQL 및 Postgresql 데이터베이스의 테이블로 가져오는 방법을 배웠습니다. 테이블을 자동으로 생성하고 데이터를 삽입하는 직접적인 접근 방식을 취할 수 있습니다. 더 길고 안전한 접근 방식은 테이블을 생성하는 쿼리를 생성하고 생성된 스키마를 검사 및 편집하고 데이터를 테이블로 가져옵니다.

    CSVKIT는 모든 데이터 과학자가 도구 상자에 있어야 하는 강력한 도구입니다.

    좋은 웹페이지 즐겨찾기