【作业】2022.5.28 将CSV写入数据库

import pymysql
import csv
from pymysql.cursors import Cursor

# utf-8-sig ---> 带字节序签名的utf-8(utf-8 with BOM)
f = open('2018年北京积分落户数据.csv', 'r', encoding='utf-8-sig', newline='')
reader = csv.reader(f)

# 1. 创建连接
conn = pymysql.connect(host='localhost', port=3306,
                       user='guest', password='guest.618',
                       database='hrs', charset='utf8mb4')

try:
    next(reader)
    # 2. 获取游标对象
    with conn.cursor() as cursor:   # type: Cursor

        # 3. 通过游标对象执行SQL语句
        cursor.execute(
            'create table if not exists tb_houses'
            '('
            'id int unsigned not null,'
            'name varchar(10) not null,'
            'birthday date not null,'
            'company varchar(50) not null,'
            'score decimal(5,2) not null,'
            'primary key (id)'
            ')engine=innodb comment "北京积分落户数据"'
        )
        params = []
        count = 0
        for row in reader:
            row[2] = row[2] + '-01'
            params.append(row)
            count += 1
            if count % 1000 == 0:
                # insert批处理,将数据批量写入数据库
                cursor.executemany(
                    'insert into tb_houses (id, name, birthday, company, score) '
                    'values (%s, %s, %s, %s, %s)',
                    params
                )
                params = []
        cursor.executemany(
            'insert into tb_houses (id, name, birthday, company, score) '
            'values (%s, %s, %s, %s, %s)',
            params)
    # 4. 手动提交(让之前的操作生效)
    conn.commit()

except pymysql.MySQLError as err:
    # 4. 手动回滚(撤销之前的操作)
    conn.rollback()
    print(err)

finally:
    # 5. 关闭连接
    conn.close()
    f.close()
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sprite.Nym

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值