下面是我想要帮助的代码.我不得不运行超过1,300,000行,这意味着插入~300,000行需要40分钟.
我认为批量插入是加速它的路线?或者是因为我通过for data in reader:部分迭代行?
#Opens the prepped csv file
with open (os.path.join(newpath,outfile), 'r') as f:
#hooks csv reader to file
reader = csv.reader(f)
#pulls out the columns (which match the SQL table)
columns = next(reader)
#trims any extra spaces
columns = [x.strip(' ') for x in columns]
#starts SQL statement
query = 'bulk insert into SpikeData123({0}) values ({1})'
#puts column names in SQL query 'query'
query = query.format(','.join(columns), ','.join('?' * len(columns)))
print 'Query is: %s' …Run Code Online (Sandbox Code Playgroud) 我试图了解python如何将数据从FTP服务器提取到pandas然后将其移动到SQL服务器.我的代码至少可以说是非常简陋的,我正在寻找任何建议或帮助.我试图从FTP服务器首先加载数据工作正常....如果我然后删除此代码并将其更改为从ms sql服务器中选择它是好的所以连接字符串工作,但插入到SQL服务器似乎造成了问题.
import pyodbc
import pandas
from ftplib import FTP
from StringIO import StringIO
import csv
ftp = FTP ('ftp.xyz.com','user','pass' )
ftp.set_pasv(True)
r = StringIO()
ftp.retrbinary('filname.csv', r.write)
pandas.read_table (r.getvalue(), delimiter=',')
connStr = ('DRIVER={SQL Server Native Client 10.0};SERVER=localhost;DATABASE=TESTFEED;UID=sa;PWD=pass')
conn = pyodbc.connect(connStr)
cursor = conn.cursor()
cursor.execute("INSERT INTO dbo.tblImport(Startdt, Enddt, x,y,z,)" "VALUES (x,x,x,x,x,x,x,x,x,x.x,x)")
cursor.close()
conn.commit()
conn.close()
print"Script has successfully run!"
Run Code Online (Sandbox Code Playgroud)
当我删除ftp代码时,它运行完美,但我不明白如何进行下一次跳转以将其转换为Microsoft SQL服务器,或者即使可以在不先保存到文件中也是如此.
我正在尝试bulk insert从 CSV 文件中的表测试中删除几条记录,
CREATE TABLE Level2_import
(wkt varchar(max),
area VARCHAR(40),
)
BULK
INSERT level2_import
FROM 'D:\test.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
Run Code Online (Sandbox Code Playgroud)
批量插入代码应该去掉第一行并将数据插入到表中。它摆脱了第一行,但在分隔符部分变得混乱。第一列是 wkt,列值是双引号,值内有逗号。
所以我想我的问题是是否有办法告诉BULK INSERT双引号部分是一列,而不管其中的逗号如何?
CSV 文件如下所示,
"MULTIPOLYGON (((60851.286135090661 510590.66974495345,60696.086128673756 510580.56976811233,60614.7860844061 510579.36978015327,60551.486015895614)))", 123123.22
Run Code Online (Sandbox Code Playgroud)