Python csv按照行读写入mysql

本文介绍了一种使用Python将CSV文件中的数据批量导入到MySQL数据库的方法。通过pymysql模块连接数据库,读取CSV文件,逐行插入数据到指定的表中。此过程包括字段映射和数据处理,适用于数据迁移或初始化数据库。
import csv
import sys,os
import pymysql

if __name__ == "__main__":
    csv_file=open('P:/a.csv')
    csv_reader_lines = csv.reader(csv_file)
    db = pymysql.connect(host="", port=3306,user="",passwd="",db='',charset='utf8')
    cur = db.cursor()
    for row in csv_reader_lines:
        field1=row[0]
        field2=row[1]
        field3=row[2]+";"+row[3]
        prolist=row[4].split("-")
        province = prolist[0]
        city=prolist[1]
        field4=province
        field5=city
        sql='''insert into t_post(post_id,user_id,lmLatLon,province,city) values(%,%,%,%,%) '''.format(field1=field1,field2=field2,field3=field3,field4=field4,field5=field5)
        cur.execute(sql)
    cur.close()
    db.close()

 

### 使用PythonCSV文件MySQL的最佳实践 #### 准备工作 为了确保数据能够顺利从CSV文件迁移到MySQL数据库,需先确认环境配置无误。这包括安装必要的库以及设置好目标数据库。 - 安装所需的Python包:`pandas`, `sqlalchemy`, 和 MySQL驱动程序(如 `PyMySQL`)。可以使用pip工具来安装这些依赖项[^1]。 ```bash pip install pandas sqlalchemy pymysql ``` #### 数据预处理 对于CSV文件本身,在将其导之前可能需要做一些准备工作以防止潜在的问题发生。比如调整文件编码至UTF-8,这样能有效避免字符集不兼容带来的乱码现象;另外还需注意Excel保存的CSV可能会存在格式上的差异,建议直接编辑原始CSV文件而非通过WPS或Excel间接操作[^4]。 #### 方法一:利用Pandas与SQLAlchemy组合实现高效批量插 这种方法适用于较大规模的数据集传输场景下,它不仅效率高而且易于维护。具体步骤如下: 1. **加载CSV文件** 利用Pandas读取本地磁盘上指定路径下的CSV文档,并创建DataFrame对象用于后续操作。 2. **建立数据库连接** SQLAlchemy提供了灵活多样的API接口来进ORM映射及原生查询构建等工作。这里主要用来获取一个可执事务的对象——engine实例。 3. **定义表结构并上传数据** 借助于to_sql()函数可以直接把整个表格一次性推送到远程服务器端对应的schema里去。 ```python import pandas as pd from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, Float # 创建引擎 engine = create_engine('mysql+pymysql://username:password@localhost/dbname') metadata = MetaData(bind=engine) table_name = 'your_table' df = pd.read_csv('path/to/yourfile.csv', encoding='utf-8') if not engine.dialect.has_table(engine.connect(), table_name): # 如果不存在则新建表 new_table = Table( table_name, metadata, Column('id', Integer, primary_key=True), Column('column1', String(50)), Column('column2', Float()), # 添加更多列... ) metadata.create_all() with engine.begin() as connection: df.to_sql(name=table_name, con=connection, index=False, if_exists='append') ``` 此方法的优势在于其简洁性和强大的功能支持,特别是当面对复杂类型字段时也能轻松应对[^3]。 #### 方法二:逐解析后单条记录插 如果考虑到某些特殊情况不适合采用上述方案,则可以选择更为传统的做法即遍历每一内容并通过execute语句逐一提交给DBMS处理。这种方式虽然速度较慢但是更加直观可控。 ```python import csv import mysql.connector conn = mysql.connector.connect(user='root', password='pwd', host='127.0.0.1', database='testdb') cursor = conn.cursor() with open('data.csv', newline='', encoding="utf-8") as csvfile: reader = csv.DictReader(csvfile) for row in reader: cursor.execute(""" INSERT INTO your_table (col1, col2,...) VALUES (%s,%s,...); """, list(row.values())) conn.commit() cursor.close() conn.close() ``` 尽管这段代码看起来简单明了,但在实际应用过程中还是推荐优先考虑基于框架的方式因为它们往往具备更好的性能表现和错误恢复机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值