我有一个txt文件。每行有4个数字,用空格隔开。(行示例,1243814474 832 23.5380533333333 37.88067)。我想在sql server的4列表中分别插入每行的每一个数字(第1列1243814474,第2列832等)。我给您的代码只插入行的第一个数字的第2、4、6和8位(例如,从1243814474开始,需要2到1列、3到2列、1到3列和4到4列)。

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()

最佳答案

当你写作时:

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()

Python split()
Odbc parametrized queries

08-07 16:41