使用python语句操作MySQL

MySQL数据库的简单操作语法

# 查看数据库
show databases;
# 使用数据库
use world;
# 查看当前使用哪些库
select database ();
# 创建数据库
create  database test charset utf8;
show databases;
# 删除数据库
drop database test;

#创建表
use world;
show tables;
create table student(
 id int,
 name varchar(10),
 age int
);
# 删除表
drop table student;

# 插入表中数据
# 先创建表
create table students(
 id int,
 name varchar(10),
 age int
);
#插入数据
insert into students (id) values(1),(2),(3);
insert into students (id,name,age)values(4,'张三',15),(5,'李四',16);
insert into students values(6,'bob',17);
# 创建数据库py_sql
create database py_sql charset utf8;
use py_sql;
create table orders(
 order_date date,
 order_id varchar(255),
 money int,
 province varchar(10)
);

创建MySQL数据库链接

# 导包
from pymysql import Connection
#获取MySQL数据库的链接对象
conn=Connection(
    host='localhost',   # 主机名(或ip地址)
    port=3306,      # 端口,默认为3306
    user='root',      # 账户名
    password='zc2020'  # 密码,自己设置的
)
#打印MySQL数据库的软件信息
print(conn.get_server_info())
#关闭数据库链接
conn.close()

执行结果如下图:可以显示MySQL的版本信息
在这里插入图片描述

执行非查询功能的MySQL语句

# 创建mysql数据库链接
# 导包
from pymysql import Connection
#获取MySQL数据库的链接对象
conn=Connection(
    host='localhost',   # 主机名(或ip地址)
    port=3306,      # 端口,默认为3306
    user='root',      # 账户名
    password='zc2020'  # 密码,自己设置的
)
#演示执行非查询性质的sql语句
#获取游标对象
cursor=conn.cursor()
# 选择数据库
conn.select_db('world')
#使用游标对象,执行sql语句,创建表格test_pysql
cursor.execute('create table test_pysql(id int,info varchar(222))')
#关闭数据库链接
conn.close()

运行结果如下:在MySQL软件的world数据库中创建了一个新的表格test_mysql。
在这里插入图片描述

执行查询语句

查询数据库world中的city表格,并利用for 循环把他打印出来

# 创建mysql数据库链接
# 导包
from pymysql import Connection
#获取MySQL数据库的链接对象
conn=Connection(
    host='localhost',   # 主机名(或ip地址)
    port=3306,      # 端口,默认为3306
    user='root',      # 账户名
    password='zc2020'  # 密码,自己设置的
)
#演示执行非查询性质的sql语句
#获取游标对象
cursor=conn.cursor()
# 选择数据库
conn.select_db('world')
#执行查询语句
cursor.execute('select * from city')
#获取查询结果
result:tuple=cursor.fetchall()
for r in result:
    print(r)
#关闭数据库链接
conn.close()

运行结果如下:
在这里插入图片描述

执行SQL的插入语句

# 创建mysql数据库链接
# 导包
from pymysql import Connection
#获取MySQL数据库的链接对象
conn=Connection(
    host='localhost',   # 主机名(或ip地址)
    port=3306,      # 端口,默认为3306
    user='root',      # 账户名
    password='zc2020'  # 密码,自己设置的
)
#演示执行非查询性质的sql语句
#获取游标对象
cursor=conn.cursor()
# 选择数据库
conn.select_db('world')
# 执行sql的插入语句
cursor.execute("insert into students values(1001,'周杰伦',31)")
# 通过commit()来确定插入语句
conn.commit()
#关闭数据库链接
conn.close()

执行结果如下图:
在这里插入图片描述
在使用插入语句是需要手动确认,这里可以在获取mysql数据库的链接对象的时候修改autocomit=True的方式来实现自动确定

![# 创建mysql数据库链接
# 导包
from pymysql import Connection
#获取MySQL数据库的链接对象
conn=Connection(
    host='localhost',   # 主机名(或ip地址)
    port=3306,      # 端口,默认为3306
    user='root',      # 账户名
    password='zc2020',   # 密码,自己设置的
    autocommit=True     #自动确认
)
#演示执行非查询性质的sql语句
#获取游标对象
cursor=conn.cursor()
# 选择数据库
conn.select_db('world')
# 执行sql的插入语句
cursor.execute("insert into students values(1002,'凌俊杰',31)")
#关闭数据库链接
conn.close()

综合案列

导入这一份文本文件和一份JSON文件的数据到数据库中。数据如下:
文本文件
在这里插入图片描述

JSON文件数据
在这里插入图片描述
新建一个数据分析的python代码文件用于获取文本数据文件和JSON数据文件

# 实现步骤:
# 1、设计一个类可以完成数据的封装
# 数据定义的类
import json

# 定义数据记录类
class Record:
    def __init__(self, date, order_id, money, province):
        self.date = date            # 订单日期
        self.order_id = order_id   # 订单id
        self.money = money         # 订单金额
        self.province = province   # 订单省份

    def __str__(self):
        return f"{self.date},{self.order_id},{self.money},{self.province}"

# 定义文件读取的抽象类
class FileReader:
    def read_date(self) -> list[Record]:
        """
        读取文件的数据,将每一条数据转换为 Record 对象并封装到列表中返回。
        :return: 包含 Record 对象的列表
        """
        pass

# 子类 TextFileReader 用于读取文本文件
class TextFileReader(FileReader):
    def __init__(self, path):
        self.path = path

    def read_date(self) -> list[Record]:
        record_list: list[Record] = []
        with open(self.path, 'r', encoding='UTF-8') as f:  # 使用 'with' 语句自动管理文件关闭
            for line in f.readlines():  # 迭代文件中的每一行
                line = line.strip()  # 去除每一行末尾的换行符等空白字符
                date_list = line.split(",")  # 使用逗号分割数据,得到列表
                record = Record(date_list[0], date_list[1], int(date_list[2]), date_list[3])  # 创建 Record 对象
                record_list.append(record)  # 将 Record 对象添加到列表
        return record_list

# 子类 JsonFileReader 用于读取 JSON 文件
class JsonFileReader(FileReader):
    def __init__(self, path):
        self.path = path

    def read_date(self) -> list[Record]:
        record_list = []
        with open(self.path, 'r', encoding='UTF-8') as f:  # 使用 'with' 语句自动管理文件关闭
            for line in f.readlines():  # 迭代文件中的每一行
                date_dict = json.loads(line)  # 解析 JSON 数据
                record = Record(date_dict['date'], date_dict['order_id'], int(date_dict['money']), date_dict['province'])  # 创建 Record 对象
                record_list.append(record)  # 将 Record 对象添加到列表
        return record_list

再到主程序里实现数据的调用和MySQL语句的写入

# 综合案例
from 数据分析案例 import *
#取到文本文件的数据
text_file_reader=TextFileReader(r"C:\Users\ZC\Desktop\python学习课件\第13章资料\2011年1月销售数据.txt")
#取到JSON文件的数据
json_file_reader=JsonFileReader(r"C:\Users\ZC\Desktop\python学习课件\第13章资料\2011年2月销售数据JSON.txt")
#存入文本文件一月的数据
jan_date:list[Record]=text_file_reader.read_date()
#存入JSON文件二月的数据
feb_date:list[Record]=json_file_reader.read_date()
# 合并一月二月的数据
all_date:list[Record]=jan_date+feb_date
# 构建MySQL链接对象
# 导包
from pymysql import Connection
#获取MySQL数据库的链接对象
conn=Connection(
    host='localhost',   # 主机名(或ip地址)
    port=3306,      # 端口,默认为3306
    user='root',      # 账户名
    password='zc2020',   # 密码,自己设置的
    autocommit=True     #自动确认
)
#演示执行非查询性质的sql语句
#获取游标对象
cursor=conn.cursor()
# 选择数据库
conn.select_db('py_sql')
#组织SQL语句
for record in all_date:
    sql=f"insert into orders(order_date,order_id,money,province) " \
        f"values('{record.date}','{record.order_id}',{record.money},'{record.province}')"
    print(sql)
    # 执行sql的插入语句
    cursor.execute(sql)
#关闭数据库链接
conn.close()

成果的展示:
在mysql的py_sql数据库的orders表中导入了数据。
在这里插入图片描述

案列二

把上面写入MySQL数据库的orders表格的数据转化成JSON数据文件写出并存储

import pymysql
import json
from datetime import date

# 自定义日期对象的JSON编码
def date_encoder(obj):
    if isinstance(obj, date):
        return obj.isoformat()
    raise TypeError("Type not serializable")

# 连接到 MySQL 数据库
conn = pymysql.connect(
    host='localhost',
    port=3306,
    user='root',
    password='zc2020',
    db='py_sql',
    autocommit=True
)

try:
    # 获取游标对象
    cursor = conn.cursor()

    # 执行 SQL 查询,选择要从数据库中检索的数据
    cursor.execute("SELECT * FROM orders")

    # 获取查询结果
    result = cursor.fetchall()

    # 将结果转换为列表,每行数据为一个字典
    records = []
    for row in result:
        record = {
            'order_date': row[0],
            'order_id': row[1],
            'money': row[2],
            'province': row[3]
        }
        records.append(record)

    # 将数据写入 JSON 文件,并使用自定义编码
    with open('orders_data.json', 'w', encoding='utf-8') as json_file:
        json.dump(records, json_file, default=date_encoder, ensure_ascii=False, indent=4)
        

except Exception as e:
    print(f"An error occurred: {str(e)}")

finally:
    # 关闭游标和数据库连接
    cursor.close()
    conn.close()

print("Data has been written to 'orders_data.json'.")

运行结果如下:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值