[英]Read a csv file in python and insert the result into a MYSQL database
[英]Read from CSV file and insert into database Python
我正在嘗試讀取 CSV 文件並插入到 PostgreSQL 數據庫中。 但我希望第 1 和第 5 列項目為整數。 因此,我將第 1 列和第 5 列轉換為整數。 但它顯示錯誤 < date_2 = int(row[0])
IndexError:列表索引超出范圍>
with open('parts_time.txt') as csvfile:
readCSV = csv.reader(csvfile, delimiter=',')
for row in readCSV:
date_2 = int(row[0])
date_4 = int(row[4])
cursor.execute("INSERT INTO parts_time
(time_id,time_day,time_month,time_year,vendor_idk)"\
"VALUES (%s,%s,%s,%s,%s)",
[date_2,row[1],row[2],row[3],date_4])
只有當里面有東西時才嘗試處理該行:
with open('parts_time.txt') as csvfile:
readCSV = csv.reader(csvfile, delimiter=',')
for row in readCSV:
if row:
date_2 = int(row[0])
date_4 = int(row[4])
cursor.execute("INSERT INTO parts_time
(time_id,time_day,time_month,time_year,vendor_idk)"\
"VALUES (%s,%s,%s,%s,%s)",
[date_2,row[1],row[2],row[3],date_4])
似乎您的文件包含空行,因為您收到IndexError試試這個。
with open('t.txt') as csvfile:
readCSV = csv.reader(csvfile, delimiter=',')
for row in readCSV:
if len(row) != 5:
continue
date_2 = int(row[0])
date_4 = int(row[4])
cursor.execute("INSERT INTO parts_time (time_id,time_day,time_month,time_year,vendor_idk) VALUES (%s,%s,%s,%s,%s)" % tuple([date_2,row[1],row[2],row[3],date_4]))
您看到的錯誤是因為您在 csv 中的數據不正確。 在處理 csv 文件時,我總是使用pandas
。 這樣您就不必考慮您所面臨的問題,它會自動為您解決。 將它與executemany
,將使您的代碼運行得更快。
import pandas
df = pd.read_csv('parts_time.txt')
df.columns = ['time_id', 'time_day', 'time_month', 'time_year', 'vendor_idk'] # You can skip this line if the column names in csv file matches that in Database
df['time_id'] = df['time_id'].astype(int)
df['vendor_idk'] = df['vendor_idk'].astype(int)
cursor.prepare("insert into parts_time(time_id,time_day,time_month,time_year,vendor_idk) values(:1, :2, :3 ,:4, :5)")
cursor.executemany(None, df.values.tolist())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.