为啥我似乎不能在 python pymysql 中迭代地填充一个 sql 表?
Posted
技术标签:
【中文标题】为啥我似乎不能在 python pymysql 中迭代地填充一个 sql 表?【英文标题】:Why can't I seem to iteratively populate a sql table in python pymysql?为什么我似乎不能在 python pymysql 中迭代地填充一个 sql 表? 【发布时间】:2021-06-05 13:24:36 【问题描述】:我正在获取一个文件 train.csv,试图对其进行迭代并创建一个新的 sql 表。我收到主键错误 IntegrityError: (1062, "Duplicate entry '0' for key 'trip2.PRIMARY'")。有没有更好的方法来创建和填充表格?我正在使用 jupyter 笔记本
import pymysql
from datetime import datetime as dt
import time
import tqdm
import json
import csv
reader = csv.DictReader(open("train.csv"), delimiter = ",")
reader.fieldnames
conn = pymysql.connect(
host='localhost',
user='root',
password = "",
db='employees',
)
cur = conn.cursor()
#10
try:
cur.execute('CREATE DATABASE IF NOT EXISTS porto')
cur.execute('USE porto')
cur.execute('CREATE TABLE trip1(trip_id INT AUTO INCREMENT PRIMARY KEY, taxi_id INT, start_year INT, start_month INT, start_day INT, start_hour INT, nb_points INT)')
for trip_id, row in tqdm.tqdm(enumerate(reader), total = N_ROWS):
tim = dt.utcfromtimestamp(int(row['TIMESTAMP']))
year = tim.year
month = tim.month
day = tim.day
hour = tim.hour
taxiid = int(row['TAXI_ID'])
nb = len(json.loads(row['POLYLINE']))
cur.execute(f'INSERT INTO trip1 VALUES(0, 1, 2, 3, 4, 5, 6)'.format(trip_id, taxiid, year, month, day, hour, nb))
conn.commit()
finally:
print(cur.execute('SELECT * FROM trip1 LIMIT 10'))
conn.close()
【问题讨论】:
Ben 如果trip_id 是一个自动增量字段,您不应该在插入其他数据时尝试设置它的值。尝试仅插入其他字段的数据。 请在此处分享您文件中的示例数据。 【参考方案1】:请从插入语句中删除trip_id,因为它是一个身份列,那么您应该可以上传了。
cur.execute(f'INSERT INTO trip1 VALUES(0, 1, 2, 3, 4, 5)'.format(taxiid, year, month, day, hour, nb))
【讨论】:
以上是关于为啥我似乎不能在 python pymysql 中迭代地填充一个 sql 表?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在虚拟机安装mysql命令报错yum install -y mariadb mariadb-server python2-PyMySQL?