import pandas as pd
import numpy as np
import pymysql
def writedata(data):
conn = pymysql.connect(host='cdb-xxxxxxxxxxxxxx.com',port=xxxxx,user='root', passwd='xxxx!', db = "city_A",charset='utf8mb4')
cur = conn.cursor()
cur.execute('show tables;')
print(cur.fetchall())
sql = "insert into `A_migration_copy1_copy1` (move_date,start_city,end_city,move_index) values {}".format(data)
cur.execute(sql)
conn.commit()
def insertVals(csvPath:str):
p = pd.read_csv(csvPath, header = None, dtype = np.str, engine = 'python')
arrayP = p.values
valuestr = []
for i in arrayP:
list_i = tuple(i)
valuestr.append(list_i)
return str(valuestr)[1:-1:]
if __name__ == '__main__':
csvPath = r"name.csv"
writedata(insertVals(csvPath))
然后经过等待了一个多小时后:


最后,cpu 顶不住了,说不干了。
- 接上,上面用python pandas读取后然后启用批量导入的方法,cpu受不了,那么有好点的方法吗?可以,我们可以一次1000,或者10000的批量导入,但是使用pandas给我的感觉是太慢了!!!我不得不想一个更加合理的方案。
- 最终解决方案:
1.用navicat,先导入本地数据库
2.在本地建立与云数据库的连接
3.本地数据库数据传输到云数据库

第一,在本地导入数据库速度,和导入云数据库的用时差不多。但是导入本地不需要网络,从csv–>table在本地完成!
第二,从本地数据库到云数据库传输是table–>table的传输,navicat上传输非常快,不用半个小时就传输完成一个三千五百多万的数据表到云数据库了。
数据表小的时候可以随时修改数据表,来适合应用程序的调用;数据表大了,去更改数据表会繁琐且容易出错,用代码去调用也需要复杂的计算。
设计存储表之前应综合考虑表的编码问题,字段存储类型,和合适的存储方法等等问题。
python处理一个上千万的csv文件需要注意什么前言数据库存储1. 建表时的数据类型选取2. 建表时的编码类型选取3. 建表时添加索引和自增问题4. navicat导入与程序导入的比较5. 程序导入pandas的读取编码选取6.多个同结构的表索引从1自增设置在程序中,插入批量数据时,最好使用这种通过一条INSERT语句来一次性插入的方式。这样可以避免程序和数据库建立多次连接,从而增加服务器负荷。合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建
数据库高级——数据库优化1数据库优化优化方式索引分库分表分区预处理sql语句优化读写分离
数据库优化
随着系统规模不断增加,数据量和并发量不断增大,整个系统架构最先受到冲击形成瓶颈的必然是数据库;因此数据优化是每一个程序员都需要了解和掌握的技能之一
SQL的执行过程
当你在sql客户端(命令行或者管理工具的图形化界面)提交一条语句后,sql解析引擎会启动,sql引擎回去解析优化这条sql(比如自动类型转化处理,帮你选择最优的索引),数据库引擎拿着优化后的sql命令去硬盘中查找数据,然后将查找数据返回(如果
使用pandas的read_excel读取,耗时巨大,而且不适合作为调试工具,这里使用openpyxl,用它的只读模式,可以 即时 读取任何单元格的内容,代码如下:
import openpyxl
file = 'big_excel.xlsx'
# 必须是只读模式,否则也是很慢
wb = openpyxl.load_workbook(file,read_only=True)
sht = wb['Sheet1']
# 从第2行5列读起,data就是一行的数据。注意,excel的第一行第一列是(1,1).
%%time
import dask.dataframe as dd ##需要安装dask模块:pip install dask
filename = '123.csv'#需要统计csv路径名+文件名
df = dd.read_csv(filename,usecols=['date'])#需要统计的列名
print("总行数为:",len(df))
#对于超过千万行的csv进行统计 可以尝试使用dask模块的read_csv进行统计。
对于超过千万行的csv进行统计 可以尝试使用dask模块的read_.
# 打开ASC文件和CSV文件
with open('example.asc', 'r') as asc_file, open('example.csv', 'w', newline='') as csv_file:
# 读取ASC文件的每一行并将其写入CSV文件
writer = csv.writer(csv_file)
for line in asc_file:
row = line.strip().split()
writer.writerow(row)
这个示例中,我们使用了Python内置的csv模块来处理CSV文件。首先,我们使用 `open()` 函数打开ASC文件和CSV文件。在打开CSV文件时,我们需要使用 `newline=''` 来避免写入CSV文件时出现空行。
然后,我们使用 `csv.writer()` 函数创建一个写入器对象,并使用 `for` 循环逐行读取ASC文件。对于每一行,我们使用 `strip()` 方法去除开头和结尾的空格,然后使用 `split()` 方法将行分割成单独的数据项。最后,我们使用写入器对象的 `writerow()` 方法将数据项写入CSV文件。
注意,这个示例假设ASC文件中的每一行都是由空格分隔的数据项。如果ASC文件使用不同的分隔符,需要相应地修改 `split()` 方法的参数。