2017-06-13 80 views
0

我正在使用Python 3.6.1和pypyodbc庫將.csv文件導入Management Studio中的本地數據庫。任何人都可以告訴我爲什麼這個代碼在Management Studio中可以很好地工作,但不是在我的pypyodbc腳本中?pypyodbc網絡路徑無法正常工作

Python腳本運行時沒有任何錯誤,但它實際上並未將C:\MemberMapUpdates中的新.csv文件插入到CSVTest表中。當我在management studio中運行該SQL命令時,它會按預期插入值。 任何的見解值得讚賞。謝謝。

import pypyodbc 
connection = pypyodbc.connect('Driver={SQL Server};' 
           'Server=SERVER-SQL;' 
           'Database=server1;' 
           'uid=sa;pwd=Pa$$word!') 
cursor = connection.cursor() 
SQLCommand = (
       ''' 
       drop table if exists CSVTest 

       create table CSVTest 
       (dccode varchar(255), 
       member varchar(255), 
       date_sub date, 
       date_add date, 
       sa_update date, 
       buff_rad float, 
       geom varchar(255), 
       sub_type varchar(255), 
       notes varchar(255)) 


       bulk 
       insert CSVTest 
       from 'C:\MemberMapUpdates\MemberMapUpdates.csv' 
       with (FIRSTROW = 3, FIELDTERMINATOR = ',', ROWTERMINATOR = '\n') 
       ''' 
      ) 
cursor.execute(SQLCommand) 
connection.close() 
print('Process Completed') 

與存儲過程更新腳本插入

import pypyodbc 
#from osgeo import ogr 

connection = pypyodbc.connect('Driver={SQL Server};' 
           'Server=SERVER-SQL;' 
           'Database=DB;' 
           'uid=sa;[email protected]!') 
cursor = connection.cursor() 
SQLCommand = ('exec FirstProcedure') 
cursor.execute(SQLCommand) 
connection.close() 
print('Process Completed') 

這是存儲過程:

   drop table if exists CSVTest; 

      create table CSVTest 
      (dccode varchar(255), 
      member varchar(255), 
      date_sub date, 
      date_add date, 
      sa_update date, 
      buff_rad float, 
      geom varchar(255), 
      sub_type varchar(255), 
      notes varchar(255)); 


      bulk 
      insert CSVTest 
      from '\\NETWORKSHARE\MemberMapUpdates\MemberMapUpdates.csv' 
      with (FIRSTROW = 3, FIELDTERMINATOR = ',', ROWTERMINATOR = '\n'); 
+0

您在這裏有幾個DDL/DML命令,並且遊標一次只能運行一個。考慮將所有內容放在存儲過程中並讓Python調用它。 – Parfait

+0

感謝您的建議,但獲得了相同的結果。 – Matt

+0

你嘗試了什麼?你分割了這些命令還是運行了一個存儲過程?請展示。 – Parfait

回答

0

缺少的部分這個難題是connection.commit()

所以這是我的完整查詢使用與上面相同的存儲過程:

import pypyodbc 

connection = pypyodbc.connect('Driver={SQL Server};' 
           'Server=SERVER-SQL;' 
           'Database=DB;' 
           'uid=sa;pwd=PASSWORD;') 
cursor = connection.cursor() 
SQLCommand = ("exec FirstProcedure;") 
cursor.execute(SQLCommand) 
connection.commit() 
connection.close() 
print('Process Completed')