我有一个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