将文件中的数据通过python传到mysql中 您所在的位置:网站首页 python下载数据库文件 将文件中的数据通过python传到mysql中

将文件中的数据通过python传到mysql中

2023-10-02 09:40| 来源: 网络整理| 查看: 265

我们需要几个包来实现这一功能,下面我和详细讲一下这几个包

一、pymysql

要传数据到数据库中肯定先要连接数据库

①连接数据库 db = pymysql.connect('localhost', 'root', '000000', 'sys') # 等价于,因为怕参数顺序错误,可以通过以下形式 db = pymysql.connect(host='localhost', user='root', password='000000', database='sys') # 等价于,也可以将参数都传到一个字典里,作为参数传递给函数 DATABASE = { 'host': 'localhost', 'database': 'girls', 'user': 'root', 'password': '000000' } db = pymysql.connect(**DATABASE)

下面是连接数据库connect的所有参数,大家写的时候可以参考一下

要完成一个MySQL数据的连接,在connect中可以接受以下参数 host=None, user=None, password="", database=None, port=0, unix_socket=None, charset='', sql_mode=None, read_default_file=None, conv=None, use_unicode=None, client_flag=0, cursorclass=Cursor, init_command=None, connect_timeout=10, ssl=None, read_default_group=None, compress=None, named_pipe=None, no_delay=None, autocommit=False, db=None, passwd=None, local_infile=False, max_allowed_packet=16*1024*1024, defer_connect=False, auth_plugin_map={}, read_timeout=None, write_timeout=None, bind_address=None host表示主机名;user表示用户名;password表示密码; database表示指定的数据库;port表示端口号,默认3306; charset表示指定字符编码(utf8mb4相当于utf-8) ②连接到了数据库之后,就是对数据库进行增删改:

首先要定义一个游标cursor,通过游标来操作数据库,别忘了操作完后要关闭游标

cursor = db.cursor() sql = 'select * from beauty' # 要执行的sql语句 # 执行sql语句 cursor.execute(sql) db.commit() # 若操作数增删改则需要提交数据 若为查询语句,得到数据后要打印数据需要用到fetchall函数 cursor = db.cursor() sql = 'select * from beauty' # 要执行的sql语句 # 执行sql语句 cursor.execute(sql) # 将执行的结果传递给data,为字符串形式 data = cursor.fetchall() for row in data: print(row)

结果: 

若要知道数据对应的是哪列可以用进阶的方法:

cursor = db.cursor() sql = 'select * from beauty' # 要执行的sql语句 # 默认情况下,我们获取到的返回值是元组,只能看到每行的数据, # 却不知道每一列代表的是什么,这个时候可以使用以下方式来返回字典,每一行的数据都会生成一个字典: # 在实例化的时候,将属性cursor设置为pymysql.cursors.DictCursor cursor = db.cursor(cursor=pymysql.cursors.DictCursor) cursor.execute(sql) data = cursor.fetchall() for row in data: print(row)

结果: 

③操作完数据库要关闭资源 # 关闭游标 cursor.close() # 关闭数据库 db.close() ④标准格式 import pymysql DATABASE = { 'host': 'localhost', 'database': 'girls', 'user': 'root', 'password': '000000' } conn = pymysql.connect(**DATABASE) my_cursor = None try: my_cursor = conn.cursor() sql = "select * from beauty" my_cursor.execute(sql) result = my_cursor.fetchall() for row in result: print(row) except Exception as e: print(e) finally: if my_cursor is not None: try: my_cursor.close() # 关闭游标 except Exception as e: print(e) try: conn.commit() # 提交数据 conn.close() # 关闭数据库 except Exception as e: print(e) 二、文件的读取

粗略来说文件可以分为3种:文本文件、二进制文件和大文件

python操作文件是用open函数,其打开试试默认以文本文件形式打开的但是open函数默认编码是None,所以处理文本文件时,要指定其文件编码

①读取小文件 file_name = 'demo2.txt' try: with open(file_name, encoding='utf-8') as file_obj: content = file_obj.read(6) content = file_obj.read(6) content = file_obj.read(6) content = file_obj.read(6) except FileNotFoundError : print(f'{file_name} 这个文件不存在!')

read的几点注意事项:

通过read来读取文件,但直接调用read()它会将文本文件的所有内容全部都读取出来,所以如果要读取的文件较大的话,会一次性将文件的内容加载到内存中,容易导致内存泄漏,所以对于较大的文件,不要直接调用read()。

要打印数据时,read()可以接收一个size作为参数,该参数用来指定要读取的字符的数量,默认值为-1,它会读取文件中的所有字符,每一次读取都是从上次读取到位置开始读取的,如果字符的数量小于size,则会读取剩余所有的,如果已经读取到了文件的最后了,则会返回''空串

结果:

②如果要读取大文件 try: with open(file_name,encoding='utf-8') as file_obj: # 定义一个变量,来保存文件的内容 file_content = '' # 定义一个变量,来指定每次读取的大小 chunk = 100 # 创建一个循环来读取文件内容 while True: # 读取chunk大小的内容 content = file_obj.read(chunk) # 检查是否读取到了内容 if not content: # 内容读取完毕,退出循环 break # 输出内容 # print(content,end='') file_content += content except FileNotFoundError : print(f'{file_name} 这个文件不存在!') ③readline与readlines

readline():该方法可以用来读取一行内容

readlines():该方法用于一行一行的读取内容,它会一次性将读取到的内容封装到一个列表中返回

file_name = 'demo.txt' with open(file_name, encoding='utf-8') as file_obj: print(file_obj.readline(), end='') r = file_obj.readlines() pprint.pprint(r[0])

且注意:readline读过的数据readlines不会再读了,反过来也是一样

结果:

三、一些可能用到的类 ①time import time # 一、时间获取: print(time.time()) # 获取当前时间戳,即计算机内部时间值,浮点数 print(time.ctime()) # 获取当前时间,并以易读方式表示 print(time.gmtime()) # 获取当前时间,表示为计算机可处理的时间格式 print(time.gmtime().tm_year) # 里面的参数可以直接通过.调用 # 二、时间格式化 # strftime(tpl, ts) # tpl是格式化模板字符串,用来定义输出效果 # ts是计算机内部时间类型变量 # %Y:年份 %m:月份 %B:月份名称(英文)%b:月份缩写(英文) %d:日期 %A:星期 # %H:小时(24小时制) %h:小时(12小时制) %M:分钟 %S:秒 # 将时间戳转换为指定形式: timeStr = time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()) print(timeStr) # 将指定形式的时间字符串转换为元组 truck_time = time.strptime(timeStr, "%Y-%m-%d %H:%M:%S") print(truck_time) # 将元组转换为时间戳 ts = time.mktime(truck_time) print(ts)

结果: 

②random:生成随机数 # Python标准库中的random函数,可以生成随机浮点数、整数、字符串,甚至帮助你随机选择列表序 # 列中的一个元素,打乱一组数据等。 import random # random库中的常用函数(共8个) # 基本随机数函数:seed(),random() # 扩展随机数函数:randint(),getrandbits(),uniform(),randrange(),choice(),shuffle() # 一、基本随机数: random.seed(10) print(random.random()) # 0.5714025946899135 print(random.random()) # 0.4288890546751146 random.seed(10) print(random.random()) # 0.5714025946899135 # 当指定一个seed种子的值之后,后面再设置种子的值,若和之前相等, # 那么random.random()得到的值会和之前的一样,一个seed对应一个random函数 # 后面的random若没有指定seed值,系统就会自动生成一个seed值 # 二、拓展随机数 print(random.randint(0, 10)) # 生成一个[0,10]之间的随机数 print(random.randrange(0, 500, 2)) # 生成一个[0,500)之间以2为步长的随机数 # 功能:如当只想得到偶数随机数或奇数随机数时可以使用 print(random.getrandbits(4)) # 生成一个4比特长的随机数 print(random.uniform(0, 50)) # 生成一个[0,10]之间的随机小数 s = [1, 2, 3, 4, 5, 6, 7, 8, 9] random.shuffle(s) # 将序列s中的元素随机排序,返回打乱后的顺序 # 注:打乱的是原来的s,这个函数没有返回值 print(s)

结果:

四、正文,将文件保存到mysql中

首先肯定是要先构件表啦!

中间是要将文件中的数据加工成你想要的数据

import pymysql import time file_name = "D:\\桌面\\part-r-00000" DATABASE = { 'host': 'localhost', 'database': 'text_exc', 'user': 'root', 'password': '000000' } db = pymysql.connect(**DATABASE) with open(file_name, encoding='utf-8') as file_obj: r = file_obj.readlines() try: for t in r: line = t.split(",") line.append(time.mktime(time.strptime(line[0], "%Y%m%d%H%M%S"))) line[0] = line[0][0:4] + "-" + line[0][4:6] + "-" + line[0][6:8] + " " + line[0][8:10] + ":" \ + line[0][10:12] + ":" + line[0][12:14] line[4] = line[4][:-1] sql = f"insert into traffic value ('{line[1]}', '{line[0]}', '{line[2]}', {float(line[3])}," \ f" {float(line[4])}, {line[5]})" my_cursor = db.cursor() my_cursor.execute(sql) except Exception as e: print(e) finally: if my_cursor is not None: try: my_cursor.close() # 关闭游标 except Exception as e: print(e) try: db.commit() # 提交数据 db.close() # 关闭数据库 except Exception as e: print(e)

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有