为啥我似乎不能在 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 表?的主要内容,如果未能解决你的问题,请参考以下文章

安装windos pymysql

为啥在虚拟机安装mysql命令报错yum install -y mariadb mariadb-server python2-PyMySQL?

Windows系统下python3中安装pyMysql

用pymysql代替MySQLdb

有人能告诉我为啥这段代码似乎可以工作,但不能……拜托?

为啥线程中的 python asyncio 进程在 Linux 上似乎不稳定?