복붙노트

[PYTHON] 파이썬을 사용하여 csv 파일을 SQL Server 데이터베이스에 작성하기

PYTHON

파이썬을 사용하여 csv 파일을 SQL Server 데이터베이스에 작성하기

안녕하세요, 저는 파이썬을 사용하여 SQL Server 데이터베이스의 테이블에 csv 파일을 작성하려고합니다. 매개 변수를 전달할 때 오류가 발생하지만 수동으로 수행하면 오류가 발생하지 않습니다. 다음은 실행중인 코드입니다.

cur=cnxn.cursor() # Get the cursor
csv_data = csv.reader(file(Samplefile.csv')) # Read the csv
for rows in csv_data: # Iterate through csv
    cur.execute("INSERT INTO MyTable(Col1,Col2,Col3,Col4) VALUES (?,?,?,?)",rows)
cnxn.commit()

오류 : pyodbc.DataError : ( '22001', [22001] [Microsoft] [ODBC SQL Server 드라이버] [SQL 서버] 문자열 또는 이진 데이터가 잘립니다. (8152) (SQLExecDirectW); [Microsoft] [ ODBC SQL Server 드라이버] [SQL Server] 문이 종료되었습니다. (3621) ')

해결법

  1. ==============================

    1.테이블 및 CSV 파일 형식과 일치하는 자리 표시 자의 수를 확인하려면 동적으로 쿼리를 작성하는 것이 좋습니다. 그런 다음 입력 한 내용을 확인하는 대신 테이블과 CSV 파일이 올바른지 확인하는 것입니다. 코드에서 자리 표시 자.

    테이블 및 CSV 파일 형식과 일치하는 자리 표시 자의 수를 확인하려면 동적으로 쿼리를 작성하는 것이 좋습니다. 그런 다음 입력 한 내용을 확인하는 대신 테이블과 CSV 파일이 올바른지 확인하는 것입니다. 코드에서 자리 표시 자.

    다음 예제에서는

    ...
    with open ('test.csv', 'r') as f:
        reader = csv.reader(f)
        columns = next(reader) 
        query = 'insert into MyTable({0}) values ({1})'
        query = query.format(','.join(columns), ','.join('?' * len(columns)))
        cursor = connection.cursor()
        for data in reader:
            cursor.execute(query, data)
        cursor.commit()
    

    열 이름이 파일에 포함되지 않은 경우 :

    ...
    with open ('test.csv', 'r') as f:
        reader = csv.reader(f)
        data = next(reader) 
        query = 'insert into dbo.Test values ({0})'
        query = query.format(','.join('?' * len(data)))
        cursor = connection.cursor()
        cursor.execute(query, data)
        for data in reader:
            cursor.execute(query, data)
        cursor.commit()
    
  2. ==============================

    2.예를 들어 인수로 열을 전달하려고 시도 했습니까?

    예를 들어 인수로 열을 전달하려고 시도 했습니까?

    for rows in csv_data: # Iterate through csv
        cur.execute("INSERT INTO MyTable(Col1,Col2,Col3,Col4) VALUES (?,?,?,?)", *rows)
    
  3. ==============================

    3.모두 감사합니다. 이 오류는 표의 크기 제한 때문에 발생했습니다. 그것은 열 용량을 col1 varchar (10)에서 col1 varchar (35) 등으로 변경했습니다. 이제는 잘 작동합니다.

    모두 감사합니다. 이 오류는 표의 크기 제한 때문에 발생했습니다. 그것은 열 용량을 col1 varchar (10)에서 col1 varchar (35) 등으로 변경했습니다. 이제는 잘 작동합니다.

    @beargle : 프로그래밍 방식이 정말 마음에 들었습니다.

  4. from https://stackoverflow.com/questions/21257899/writing-a-csv-file-into-sql-server-database-using-python by cc-by-sa and MIT license