2016-07-14 56 views
2

我使用pymssql連接到Azure上的MS SQL數據庫並從CSV文件插入記錄。我已驗證連接是否成功,並且用於executemany參數的列表包含正確格式的所有數據以及正確數量的值。但是,當我運行腳本0行插入 - 但沒有錯誤引發。成功連接到Azure上的MS SQL數據庫使用pymssql,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(操作參數)的語法,並傳遞值的列表作爲參數,然後它導致一個不正確的語法錯誤。

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

我剛剛在module reference中看到只支持%s和%d。所以我認爲這可能是問題。但我如何通過浮動?

+0

如果您嘗試在控制檯中執行像這樣的示例查詢,會發生什麼? – Ares

+0

我可以成功地從MS SQL Server Management Studio中插入行。 – michoco

+0

Python腳本是否說沒有行更改?數據庫中是否反映了這些變化? – Ares

回答

2

使用浮動佔位符(%f)實際上是問題所在。只有%s和%d被支持,但是純粹是佔位符,並且不會影響它們通常在python中執行的格式,所以實際上只需要%s。工作代碼如下:

cursor.executemany("INSERT INTO myTable VALUES(%s,%s,%s,%s,%s,%s)",list_of_values) 
相關問題