python mysql 保存csv_使用Python将csv文件快速转存到Mysql

因为一些工作需要,我们经常会做一些数据持久化的事情,例如将临时数据存到文件里,又或者是存到数据库里。

对于一个规范的表文件(例如csv),我们如何才能快速将数据存到Mysql里面呢?

这个时候,我们可以使用python来快速编写脚本。

使用Python连接Mysql,我们就少不了使用pymysql这个模块。

使用pip进行快速安装:

pip install pymysql

安装结束,我们使用pymysql连接数据库:

import pymysql

con = pymysql.connect(user="root", passwd="root", db="test", host="47.95.xxx.xxx", local_infile=1)`

user是连接数据库的用户名,passwd是连接数据的密码,db是你想要连接数据库的名字,host是你要连接数据库的主机,如果就是自己的电脑,就填127.0.0.1。我们这边是将csv批量写到数据库,需要设置local_infile参数,如果不添加会报错。

连接完数据库我们便可以使用游标来执行sql语句了:

cur = con.cursor()

定义好了游标我们就可以使用execute方法来执行sql语句了。

cur.execute("set names utf8")

cur.execute("SET character_set_connection=utf8;")

下面来打开csv文件,读取里面的内容,我们需要提取第一行列名的信息,然后创建表:

with open(file_path, 'r', encoding='utf8') as f:

reader = f.readline()

print(reader)

devide = reader.split(',') # 做成列表

devide[-1] = devide[-1].rstrip('\n') # 去除最后的换行符 print(devide)

默认读出来的数据就是一行字符串,现在我们通过“,”提取我们的列名,并且去除我们最后一个列名的换行符,这样我们就能得到所有的列名了。

下面我们需要创建表,在创建表之前我们需要将每个列指定一下格式:

column = ''

for dd in devide: column = column + dd + ' varchar(255),'

拼接好后我们需要将最后一个列的逗号去掉

col = column.rstrip(',')

这样我们就可以写创建表的sql语句了:

table_name = "TBexport"

create_table_sql = 'create table if not exists {} ({}) DEFAULT CHARSET=utf8'\ .format(table_name, col)

cur.execute(create_table_sql)

下面我们可以向表中插数据了:

首先要介绍一下,mysql支持csv数据的导入,以下是sql的语法:

最后一步,提交事务。(事务保证他们的连贯性,只要一步错就会进行回滚)

con.commit()

记得关闭游标和数据库连接。

cur.close() con.close()

完整代码:

import pymysql

# file_path = "exam.csv"

# table_name = 'update_time_table'

file_path = "export.csv"

table_name = "TBexport"

try:

con = pymysql.connect(user="root", passwd="root", db="test", host="47.95.20x.xxx", local_infile=1) con.set_charset('utf8')

cur = con.cursor()

cur.execute("set names utf8")

cur.execute("SET character_set_connection=utf8;")

with open(file_path, 'r', encoding='utf8') as f:

reader = f.readline()

print(reader)

devide = reader.split(',') # 做成列表

devide[-1] = devide[-1].rstrip('\n') # 去除最后的换行符

print(devide)

column = '' for dd in devide: # 如果标题过长,只能存成text格式 if dd == "标题": column = column + dd + ' TEXT,' else: column = column + dd + ' varchar(255),'

col = column.rstrip(',') # 去除最后一个多余的,

# print(column[:-1])

create_table_sql = 'create table if not exists {} ({}) DEFAULT CHARSET=utf8'.format(table_name, col) print(create_table_sql)

data = 'LOAD DATA LOCAL INFILE \'' + file_path + '\'REPLACE INTO TABLE ' + table_name + ' CHARACTER SET UTF8 FIELDS TERMINATED BY \',\' ENCLOSED BY \'\"\' LINES TERMINATED BY \'\n\' IGNORE 1 LINES;'

cur.execute(create_table_sql)

cur.execute(data.encode('utf8'))

print(cur.rowcount)

con.commit()

except:

print("发生错误")

con.rollback()

finally:

cur.close()

con.close()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/502942.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python分词_Python 结巴分词实现关键词抽取分析

1 简介 关键词抽取就是从文本里面把跟这篇文档意义最相关的一些词抽取出来。这个可以追溯到文献检索初期,当时还不支持全文搜索的时候,关键词就可以作为搜索这篇论文的词语。因此,目前依然可以在论文中看到关键词这一项。 除了这些&#xff0…

redis 如何 mysql_Redis 如何保持和 MySQL 数据一致

一、需求起因在高并发的业务场景下,数据库大多数情况都是用户并发访问最薄弱的环节。所以,就需要使用redis做一个缓冲操作,让请求先访问到redis,而不是直接访问MySQL等数据库。这个业务场景,主要是解决读数据从Redis缓…

truncate python是删除文件内容吗_在Python中操作文件之truncate()方法的使用教程

truncate()方法截断该文件的大小。如果可选的尺寸参数存在,该文件被截断(最多)的大小。 大小默认为当前位置。当前文件位置不改变。注意,如果一个指定的大小超过了文件的当前大小,其结果是依赖于平台。 注意:此方法不会在当文件工…

sqlserver mysql时间格式化_SqlServer时间格式化

最近用的SqlServer比较多, 时间 格式化 老是忘记,现整理如下:(来源于网上,具体来源地址忘记了,归根到底MSDN吧) SELECT CONVERT(varchar(50), GETDATE(), 0): 05 16 2006 10:57AM SELECT CONVERT(varchar(50), GETDATE…

iframe 跨域_【梯云纵】搞定前端跨域

韦陀掌法,难陀时间善恶;梯云纵,难纵过乱世纷扰。现在开始写代码o(╯□╰)o什么是跨域1.跨域的定义广义的跨域是指一个域下对的文档或者脚本试图去请求另外一个域下的资源。a链接、重定向、表单提交、、、等标签background:url()、font-face()ajax 跨域请求……狭义的…

java中exception_Java中的异常 Exceptions

1. 概念exception是“exceptional event”的缩写,是指执行程序中发生的事件,破坏了程序的正常执行流程。Java 异常处理机制使程序更加健壮易于调试,它可以告诉程序员三个问题:错误的类型、位置、原因,帮助程序员解决错…

python异步asy_Python 异步编程之asyncio【转载】

一、协程的认识 协程(Coroutine),也可以被称为微线程,是一种用户态内的上下文切换技术。 简而言之,其实就是通过一个线程实现代码块相互切换执行。例如:deffunc1():print(1) ...print(2)deffunc2():print(3…

bitcount java_Java源码解释之Integer.bitCount

Java中的Integer.bitCount(i)的返回值是i的二进制表示中1的个数。源码如下:public static int bitCount(int i) {// HD, Figure 5-2i i - ((i >>> 1) & 0x55555555);i (i & 0x33333333) ((i >>> 2) & 0x33333333);i (i (i >&…

python自定义全局异常_如何在python中进行全局异常捕获

使用sys.excepthook函数进行全局异常的获取。 首先定义异常处理函数, 并使用该函数接收系统异常信息。 import wx import sys class TestFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, test) btn wx.Button(self, -1, test) btn.Bind(w…

git merge 冲突_卧槽!小姐姐用动画图解 Git 命令,这也太秀了吧?!

公众号关注 “GitHubDaily”设为 “星标”,每天带你逛 GitHub!大家好,我是小 G。在座的各位应该都知道,Git 作为居家必备、团队协作之利器,自从 Linus Torvalds 发布这款工具后,便一直受到各路开发者的喜爱…

freebsd java 能用吗_在FreeBSD 4.9下安装JAVA环境

导读:资源下载地址:1.http://www.sun.com/softwarre/java2/download.html2.http://ftp.csie.chu.edu.tw/FreeBSD/distfiles/openmotif/3.http://ameba.sc-uni.ktu.lt/pub/FreeBSD/4.http://www.wormwang.net/mirrors/java/一、以下的包要先下载放到各自的…

python中exec是什么意思_Python中的进程分支fork和exec详解

在python中,任务并发一种方式是通过进程分支来实现的.在linux系统在,通过fork()方法来实现进程分支. 1.fork()调用后会创建一个新的子进程,这个子进程是原父进程的副本.子进程可以独立父进程外运行. 2.fork()是一个很特殊的方法,一次调用,两次返回. 3.fork()它会返回2个值,一个…

java冒泡排序原理_冒泡排序原理及其java实现

冒泡排序原理:临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样外层循环每循环一次,都会把一个数的顺序排好(从小到大的话每次都会把上回剩余的数据最大的放在剩余数的最后面,反之则是最小的放剩余…

java holder_java.sql.SQLException: connection holder is null

错误信息2017-11-15 14:53:16.931 [ ] ERROR com.hzcf.flagship.web.AssetPlanController 126 :### Error updating database. Cause: java.sql.SQLException: connection holder is null### Cause: java.sql.SQLException: connection holder is null; uncategorized SQLExcep…

java signed_如何从java中的字节读取signed int?

我有一个规范读取接下来的两个字节是signed int.要在java中读取我有以下内容当我使用以下代码在java中读取signed int时,我得到值65449计算无符号的逻辑int a (byte[1] & 0xff) <<8int b (byte[0] & 0xff) <<0int c ab我认为这是错误的,因为如果我和0xff我…

android 删除文件 代码_代码审计之某系统后台存在任意删除文件

本文作者&#xff1a;霾团队交流群&#xff1a;673441920-----------------------------------------------------------前言POC镇楼&#xff01;&#xff01;&#xff01;POST 漏洞演示过程&#xff1a;首先我们利用D盾监听下我们的项目以外的目录。这里刚刚我们创建了这个文件…

ubuntu java8 java9_在Ubuntu/Debian系统上安装Java 9的方法

本文介绍在Ubuntu/Debian系统上安装Oracle Java 9的方法&#xff1a;使用webupd8team/java PPA&#xff0c;相同的PPA提供了Java 8和Java 7等旧版Java的软件包&#xff0c;如果你的应用程序需要这个&#xff0c;可以随意安装它们。要安装新版本可参考在Ubuntu 18.04系统上安装J…

websocket 压力测试_打造最强移动测试平台

笔者今年换掉了服役N年的旧手机&#xff0c;新手机12G的RAM&#xff0c;比自用的本子内存都大&#xff0c;如果只是玩游戏感觉不能完全发挥出全部机能&#xff0c;但又因为怕影响日常使用没有进行root&#xff0c;经过一番折腾&#xff0c;发现即使不root也不影响把它变成一款测…

python银行系统模拟演练_python多线程实现代码(模拟银行服务操作流程)

1.模拟银行服务完成程序代码目前&#xff0c;在以银行营业大厅为代表的窗口行业中大量使用排队(叫号)系统&#xff0c;该系统完全模拟了人群排队全过程&#xff0c;通过取票进队、排队等待、叫号服务等功能&#xff0c;代替了人们站队的辛苦。排队叫号软件的具体操作流程为&…

字符串左侧补0_(48)C++面试之最长不含重复字符的子字符串(动态规划)

// 面试题48&#xff1a;最长不含重复字符的子字符串// 题目&#xff1a;请从字符串中找出一个最长的不包含重复字符的子字符串&#xff0c;计算该最长子// 字符串的长度。假设字符串中只包含从a到z的字符。#include <vector> #include <string> #include <iost…