4

IronPython を使用してデータ配列を作成しています。この配列を MS SQL Server に挿入する必要があります。私が使用している .Net クラスは SqlBulkCopy (System.Data.SqlClient の一部) です。

この StackOverflow の記事は、リストからの SqlBulkCopy が非常に役立つことがわかりました。

ただし、Python を学び始めたばかりなので、この C# の例を Python コードで再現するのは困難です。

これが私がこれまでに持っているものです

import clr
clr.AddReference('System.Data')
from System.Data import *

import clr
clr.AddReference('System')
from System import *

sqlDbConnection = SqlClient.SqlConnection("<my-db-connection-string>")
sqlDbConnection.Open()

myDataArray = [
[Byte(7), Byte(8), Int32(1), Byte(15), Byte(12), Single(0.34324)],
[Byte(5), Byte(1), Int32(2), Byte(11), Byte(10), Single(0.77362)],
[Byte(9), Byte(2), Int32(3), Byte(12), Byte(9), Single(0.93394)]]

sqlDbConnection.Close()

アイデアは、大きなデータ配列 (たとえば、100 万行以上) を生成し、一括コピー メソッドを使用してテーブルにインポートすることです。誰かがこれに光を当て、これにどのように取り組むことができるか、および一括コピー クラスに付属するすべてのオプションをどのように利用できるかを説明していただければ幸いです。SqlBulkCopy msdn リファレンス

Python で役立つ例を探していましたが、これまでのところ見つかりませんでした...

とても有難い

4

1 に答える 1

3

最後に、これについて頭を悩ませました。これが役立つことを願っています:

import clr
clr.AddReference('System.Data')
from System.Data import SqlClient
from System.Data import *
from System.Data import DataTable

import clr
clr.AddReference('System')
from System import *
from System import Console
from System import Data

sqlConnectionString = "<sql-connection-string>"
sqlDbConnection = SqlClient.SqlConnection(sqlConnectionString)
sqlDbConnection.Open()

workTable = DataTable()
workTable.Columns.Add("Col1", Byte)
workTable.Columns.Add("Col2",Byte)
workTable.Columns.Add("Col3", Int32)
workTable.Columns.Add("Col4", Byte)
workTable.Columns.Add("Col5", Byte)
workTable.Columns.Add("Col6", Single)

sampleArray = [Byte(7), Byte(8), Int32(1), Byte(15), Byte(12), Single(0.34324)] 
for i in range (0, 189000) :
  workTable.Rows.Add(Array[object](sampleArray))

cmd = SqlClient.SqlCommand("truncate table dbo.MyTable", sqlDbConnection);
def bulkLoadEsgData (): 
    sbc = SqlClient.SqlBulkCopy(sqlConnectionString, SqlClient.SqlBulkCopyOptions.TableLock, BulkCopyTimeout=0, DestinationTableName="dbo.MyTable")
    sbc.WriteToServer(workTable)

# Start simulation
Console.WriteLine("Enter number of simulations (1 simulation = 189,000 data rows):"+"\n")
strN = Console.ReadLine()

n = int(strN)
cmd.ExecuteNonQuery()
for i in range (0, n):
    bulkLoadEsgData()

sqlDbConnection.Close()
Environment.Exit(1111)
于 2012-12-31T09:54:55.150 に答える