用 PYTHON 拆分文本文件后,只有最后一行被插入到我的 sql 数据库中

Only the last row is inserted to my sql database from a text file after splitting it with PYTHON

下面是我使用管道作为分隔符拆分文本文件并将其插入数据库的代码。问题是只有最后一行被插入到我的数据库中,但它读取了整个文本文件。意思是,我的文本文件有 34 个条目,当我 运行 程序时,我得到 34 行具有相同的数据,这是最后一行。

文本文件内容示例:

4 | kenichi | matsuyama | 02498
5 | toru | watanabe | 92832

最后一行是 5 |彻 |渡边 | 92832,当我 运行 它时,我得到了 34 行数据.. 没有错误,只是最后一行是插入到我的 sql 数据库中的唯一数据。感谢您的帮助,我理解其他人是否会对我的编码方式感到不安。我还在学习这些东西。

我想要的是将所有行从我的文本文件加载到我的 table。谢谢!

import csv 
import pymssql

db = pymssql.connect(host='localhost', user='xx', password='xx', database='dbpython')
cursor = db.cursor()

filename = "ttest.txt"

mynumbers = []
with open(filename, 'r') as f:
    for line in f:
        mynumbers.append([n for n in line.strip().split(' | ')])
    for pair in mynumbers:
        try:
            x,y,z,a = pair[0],pair[1],pair[2],pair[3]
        except IndexError:
            print "A line in the file doesn't have enough entries."

print "Records stored in a variable"

cursor.execute('truncate table tbl_contact')
with open('ttest.txt') as f:
    for row in f:
        cursor.execute('INSERT INTO tbl_contact VALUES (%s, %s, %s, %s)', (x,y,z,a))
    print "Record Inserted"

db.commit()
db.close()

您只将最后的 x,y,z,a 作业写入 table。试试这个:

import csv 
import pymssql

db = pymssql.connect(host='localhost', user='xx', password='xx', database='dbpython')
cursor = db.cursor()

filename = "ttest.txt"
mynumbers = []

cursor.execute('truncate table tbl_contact')

with open(filename, 'r') as f:
    for line in f:
         try:
             values = line.strip().split('|')
             x,y,z,a = int(values[0]), values[1], values[2], values[3]
             cursor.execute('INSERT INTO tbl_contact VALUES (%s, %s, %s, %s)', (x,y,z,a))
             print "Record Inserted"
         except IndexError:
             print "Some error occurred."

db.commit()
db.close()

你也不需要列表理解和括号:

[n for n in line.strip().split(' | ')]

您可以这样做:

line.strip().split(' | ')