文章目录

  • 前言
  • 步骤
    • 1. 定义一个init方法,用于读取数据库
    • 2. 定义一个del类,用于运行完所有程序后关闭数据库和游标对象
    • 3. 读取csv文件的列索引,用于建立数据表时的字段
    • 4. 读取csv文件数据
    • 5. 在数据表中写入数据
    • 6. 定义一个确认事务运行
    • 7. 新创建数据表 【需要更改】
    • 8. 运行程序
    • 9. 封装函数
  • 完整代码
  • 补充

前言

想把之前存入CSV文件的天气数据读取出来放进MySQL数据库,于是新建了一个python文档
参照这篇教程读取csv文件写入mysql数据库
不需要其他准备,只要更改CSV文件地址,和创建的表格名字,各项属性即可
有需要更改的地方我会在下面直接标出来!!!

环境:
vscode+MySQL
python
首先导入两个库

import pymysql

import pandas as pd

步骤

1. 定义一个init方法,用于读取数据库

【需要根据自己数据库的名字和密码更改代码】
def __init__(self):
账号 user=“root”,
密码password=“root”
要存储的数据库的名字 database=“weather”
若存入数据有中文,加上 charset=“utf8”

#定义一个init方法,用于读取数据库
    def __init__(self):
        #读取数据库和建立游标对象
        self.connect = pymysql.connect(host="127.0.0.1",port=3306,user="root",password="root",database="weather",charset="utf8")
        self.cursor = self.connect.cursor()

2. 定义一个del类,用于运行完所有程序后关闭数据库和游标对象

def __del__(self)::

#定义一个del类,用于运行完所有程序的时候关闭数据库和游标对象
    def __del__(self):
        self.connect.close()
        self.cursor.close()

3. 读取csv文件的列索引,用于建立数据表时的字段

【更改CSV文件读取路径】
def read_csv_colnmus(self):

 def read_csv_colnmus(self):
        #读取csv文件的列索引,用于建立数据表时的字段
        csv_name='D:\\code\\python project\\pachong\\weather_project\\weather_year.csv'
        data = pd.read_csv(csv_name,encoding="utf-8")
        return data

4. 读取csv文件数据

【同上,更改CSV文件读取路径】
def read_csv_values(self):

def read_csv_values(self):
        #读取csv文件数据
        csv_name='D:\\code\\python project\\pachong\\weather_project\\weather_year.csv'
        data = pd.read_csv(csv_name, encoding="utf-8")
        data_3 = list(data.values)
        return data_3

5. 在数据表中写入数据

【更改执行的sql语句】
def write_mysql(self):

def write_mysql(self):
        #在数据表中写入数据,因为数据是列表类型,把他转化为元组更符合sql语句
        for i in self.read_csv_values(): #因为数据是迭代列表,所以用循环把数据提取出来
            data_6 = tuple(i)
            sql = """insert into weather_year_db values{}""".format(data_6)
            self.cursor.execute(sql)
            self.commit()
        print("\n数据植入完成")
这里sql语句是指将值插入weather_year_db这个表中,根据自己要求更改表名
sql = """insert into weather_year_db values{}""".format(data_6)

6. 定义一个确认事务运行

def commit(self):

def commit(self):
        #定义一个确认事务运行
        self.connect.commit()

7. 新创建数据表 【需要更改】

def create(self):

def create(self):
        #若已有数据表weather_year_db,则删除
        query="drop table if exists weather_year_db;" #更改表明
        self.cursor.execute(query)
        #创建数据表,用刚才提取的列索引作为字段
        data_2 = self.read_csv_colnmus()
        #根据自己要创建的表格更改sql语句
        sql = "create table if not exists weather_year_db(date_time DATETIME not null,high varchar(50) not null,low varchar(50) not null,weather varchar(50) not null,primary key(date_time))default charset=utf8;"
        self.cursor.execute(sql)
        self.commit()

这一句,根据自己要求更改表名。这是为了防止数据库里面已经有这个表,所以先删除这个表

query="drop table if exists weather_year_db;" #更改表明

再根据自己要创建的表格更改sql语句

8. 运行程序

记得要先调用创建数据的类,再创建写入数据的类
def run(self):

#运行程序,记得要先调用创建数据的类,在创建写入数据的类
    def run(self):
        self.create()
        self.write_mysql()

9. 封装函数

将以上函数封装到一个类里,用main函数运行以上代码

#最后用一个main()函数来封装
def main():
    sql = Mysql_csv()
    sql.run()

完整代码

# """ 配置数据库 """
# HOST='127.0.0.1'
# PORT='3306'
# USERNAME='root'
# PASSWORD='root'
# DATABASE='ul'

# select * from character

import pymysql

import pandas as pd
#用面向对象的方式编写,更加熟悉面向对象代码风格
class Mysql_csv(object):
    #定义一个init方法,用于读取数据库
    def __init__(self):
        #读取数据库和建立游标对象
        self.connect = pymysql.connect(host="127.0.0.1",port=3306,user="root",password="root",database="weather",charset="utf8")
        self.cursor = self.connect.cursor()
    #定义一个del类,用于运行完所有程序的时候关闭数据库和游标对象
    def __del__(self):
        self.connect.close()
        self.cursor.close()
    def read_csv_colnmus(self):
        #读取csv文件的列索引,用于建立数据表时的字段
        csv_name='D:\\code\\python project\\pachong\\weather_project\\weather_year.csv'
        data = pd.read_csv(csv_name,encoding="utf-8")
        return data
    def read_csv_values(self):
        #读取csv文件数据
        csv_name='D:\\code\\python project\\pachong\\weather_project\\weather_year.csv'
        data = pd.read_csv(csv_name, encoding="utf-8")
        data_3 = list(data.values)
        return data_3
    def write_mysql(self):
        #在数据表中写入数据,因为数据是列表类型,把他转化为元组更符合sql语句
        for i in self.read_csv_values(): #因为数据是迭代列表,所以用循环把数据提取出来
            data_6 = tuple(i)
            sql = """insert into weather_year_db values{}""".format(data_6)
            self.cursor.execute(sql)
            self.commit()
        print("\n数据植入完成")
    def commit(self):
        #定义一个确认事务运行
        self.connect.commit()
    def create(self):
        #若已有数据表weather_year_db,则删除
        query="drop table if exists weather_year_db;"
        self.cursor.execute(query)
        #创建数据表,用刚才提取的列索引作为字段
        data_2 = self.read_csv_colnmus()
        sql = "create table if not exists weather_year_db(date_time DATETIME not null,high varchar(50) not null,low varchar(50) not null,weather varchar(50) not null,primary key(date_time))default charset=utf8;"
        self.cursor.execute(sql)
        self.commit()
    #运行程序,记得要先调用创建数据的类,在创建写入数据的类
    def run(self):
        self.create()
        self.write_mysql()

#最后用一个main()函数来封装
def main():
    sql = Mysql_csv()
    sql.run()
if __name__ == '__main__':
    main()

补充

另外,vscode有两个连接数据库的很好用的插件,建议下载下来试试,可以直接在vscode里面查看数据库的信息

可以自己查查如何安装,做个推荐 使用 Visual Studio Code 链接 MySql 数据库并进行查询

更多推荐

将CSV文件数据存入MySQL数据库的详细代码 | 直接可以用