我正在使用Ironpython创建数据阵列,我需要将此数组插入MS SQL Server。我正在使用的.net类是sqlbulkcopy(system.data.sqlclient的一部分)。
我从列表中找到了这篇stackoverflow文章很有用的sqlbulkcopy
但是,由于我刚开始学习python,所以我很难用Python代码重新创建此C#示例。
这是我到目前为止的
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中的有用示例,但到目前为止尚未找到任何...
非常感谢
终于让我围绕着这个问题,希望这证明有帮助:
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)