2017-06-13 8 views
0

私は、Python 3.6.1とpypyodbcライブラリを使用して.csvファイルをManagement StudioのローカルDBにインポートしています。誰も私のpypyodbcスクリプトではなく、このコードがManagement Studioで完璧にうまく動作する理由を教えていただけますか?pypyodbcネットワークパスが正しく動作しない

Pythonスクリプトはエラーなしで実行されますが、実際には新しいCSVファイルがC:\MemberMapUpdatesのCSVTestテーブルに挿入されるわけではありません。管理スタジオで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コマンドがあり、カーソルは一度に1つのみ実行されます。すべてをストアドプロシージャに配置し、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') 
関連する問題