2016-06-14 35 views
2

我有一個txt文件。每行有4個數字以空格分隔。 (行示例,1243814474 832 23.5380533333333 37.88067)。我想分別在sql服務器的4列表中插入每行的每一行數(第1列爲1243814474,第2列爲832等)。我給你的代碼只插入第一個數字的第2,4,6和8位數字(例如,從1243814474開始,它需要2到1列,3到2列,1到3列和4到4列)。txt插入到使用python的sql服務器

import pyodbc 
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=my_server;DATABASE=test;UID=myusername;PWD=mypassword') 
cursor = cnxn.cursor() 
with open("information.txt") as infile: 
    for line in infile: 
     cursor.execute("insert into temp1(tmstmp, shipno, lon, lat) values (" + line[1] + ", " + line[3] +", " + line[5] + ", " + line[7] +")") 
     cnxn.commit() 
+0

在bobby表訪問之前,您需要閱讀,瞭解並開始使用參數化查詢。 http://bobby-tables.com/ –

+1

你需要先分割線,'strlist = line.split()' – SparkAndShine

回答

2

當你寫:

for line in infile: 

line是一個字符串,而不是一個列表。 line[0]將通過拆分它在空間

還返回字符串的第一個字符

可以使用split(" ")功能將一個字符串的字符串列表,使用參數化查詢,以確保SQL注入是不是一個問題

最後,通過用括號括起長字符串來打破長字符串有助於提高可讀性。沒有人想要水平滾動來查看所有代碼。

with open("information.txt") as infile: 
    for line in infile: 
     data = line.split(" ") 
     query = ("insert into temp1(tmstmp, shipno, lon, lat) " 
       "values (?, ?, ?, ?)") 
     cursor.execute(query, data[0], data[1], data[2], data[3]) 
     cnxn.commit() 

或者乾脆:

with open("information.txt") as infile: 
    for line in infile: 
     data = line.split(" ") 
     query = ("insert into temp1(tmstmp, shipno, lon, lat) " 
       "values (?, ?, ?, ?)") 
     cursor.execute(query, *data) 
     cnxn.commit() 
0

謝謝!我從line.plit(" ")刪除了" ",它工作正常!

+0

Split()將默認在空格上分割,所以'「」'不是必須的。但是,您試圖做的是使用指定的分隔符更清晰。 –