在测试的时候,需要造模拟数据,或者是将生产环境的数据导出到测试环境中去,本文记录通过python读取txt文件,并将数据导入mysql数据库
1、示例代码
import pymysql
import pandas as pd
mydb = pymysql.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="yourdatabase"
)
mycursor = mydb.cursor()
# 从txt文档取数数据
df = pd.read_csv('D:\\excel\\test.txt', delimiter=',', encoding='gbk')
# print(df)
#先清空表数据
sql1 = "truncate table test"
mycursor.execute(sql1)
df = df.where(pd.notnull(df), None)
for index, row in df.iterrows():
try:
# Convert NaN values to None
row = row.where(pd.notnull(row), None)
# 字段是否为空处理
row['coml1'] = int(row['coml1']) if not pd.isna(row['coml1']) else None
row['coml2'] = int(row['coml2']) if not pd.isna(row['coml2']) else None
sql = "INSERT INTO test(id,coml1,coml2) " \
"VALUES (%s, %s, %s)"
val = tuple(row)
mycursor.execute(sql, val)
except Exception as e:
print(f"Error occurred: {e}")
mydb.rollback()
mydb.commit()
mycursor.close()
mydb.close()
2、需要注意的问题
1、txt文件中的“,”(逗号)间隔符一定要是英文格式的,我在这里除了问题,排查了半天
2、sql语句中的占位符,一定要是%s,不能加引号
3、文件的路径,一般可以用“/”,使用“\”的时候需要用’’\’’,因为python中“\”是转义符
4、cursor.execute需要在循环内,循环一次执行一次