2016-07-14 3 views
2

저는 pymssql을 사용하여 Azure에서 MS SQL DB에 연결하고 CSV 파일에서 레코드를 삽입합니다. 연결이 성공하고 executemany 매개 변수에 사용 된 목록에 올바른 형식 및 올바른 값 개수의 모든 데이터가 포함되어 있는지 확인했습니다. 그러나 스크립트를 실행하면 0 개의 행이 삽입되지만 오류는 발생하지 않습니다.pymssql을 사용하여 Azure에서 MS SQL DB에 성공적으로 연결했습니다. INSERT 문은 오류 메시지없이 실행되지만 0 행이 삽입되었습니다.

나는 주위를 둘러 보았고 비슷한 것을 경험 한 대부분의 사람들이 commit()을 놓치고있는 것 같았지만 여기에는 문제가 없다.

다음은 코드입니다. 어떤 도움이라도 대단히 감사합니다.

with open('file.csv') as csvfile: 
    data = csv.reader(csvfile) 
    next(data) 
    dicts = ({'col1': line[0], 'col1': line[1], 'col3': line[2], 'col4': int(line[3]), 'col5': int(line[4]), 'col6': float(line[5])} for line in data) 
    to_db = ((i['col1'], i['col2'], i['col3'], i['col4'], i['col5'], i['col6']) for i in dicts) 
    cursor.executemany(
     'INSERT INTO myTable VALUES (%s, %s, %s, %d, %d, %f)', 
     to_db) 
    print str(cursor.rowcount) + " rows inserted" 
    conn.commit() 

편집 : 나는 성공적으로 데이터베이스에 행을 삽입 할 수있는 쿼리를 사용하여 cursor.execute()를 실행하고 쿼리에 명시 적으로 값을 포함 할 경우 (예를 들어 아래 참조).

cursor.execute("INSERT INTO myTable VALUES ('4/18/2016','test','test',0,0,0.0)") 

그러나 cursor.executemany (동작 파라미터) 구문과 매개 변수로 값의리스트를 전달할 사용자 I이라면이 잘못된 구문 오류가 발생

.

cursor.executemany("INSERT INTO myTable VALUES(%s,%s,%s,%d,%d,%f)",list_of_values) 

난 그냥 단지 % s 및 % d를 지원하는 module reference에 읽고 있었다. 그래서 그게 문제라고 생각합니다. 그러나 나는 어떻게 부유물을 통과합니까?

+0

콘솔에서 이와 같은 샘플 쿼리를 실행하려고하면 어떻게됩니까? – Ares

+0

MS SQL Server Management Studio에서 행을 성공적으로 삽입 할 수 있습니다. – michoco

+0

파이썬 스크립트가 행이 변경되지 않았다고 말합니까? 변경 사항이 DB에 반영됩니까? – Ares

답변

2

실제로 float 자리 표시 자 (% f)를 사용하는 것이 문제였습니다. % s 및 % d만이 지원되지만 순수한 자리 표시 자이며 일반적으로 Python에서 수행하는 방식의 형식을 지정하는 데 영향을 미치지 않으므로 % s 만 필요합니다. 작동 코드는 다음과 같습니다.

cursor.executemany("INSERT INTO myTable VALUES(%s,%s,%s,%s,%s,%s)",list_of_values)