Python实现对MySql数据库创建和自动导入SQL文件

开始本篇

本篇分享自动创建数据库和自动导入SQL文件。

创建数据库和导入SQL的操作,咱们经常使用的方式也是在工具中直接创建和导入,如在Navicat中[新建数据库],在新建的数据库中[运行SQL文件],操作简单也方便。

本次实际运用的场景是将上篇分享中的database.sql文件,导入到新创建的数据库中,将导出和导入的自动化形成一个完整的闭环。

此次实现自动创建和导入的功能是针对上篇的database.sql文件,当初导出的时候就具有特殊性和定制性,不同的SQL文件有可能需要有些特殊地处理(比如文件编码格式等)。有借用到自己数据库的同学,如果有不成功的情况,那就需要根据实际情况在这基础上稍作优化


环境:

Pycharm

Python 3.9.18


安装:

pip install mysql-connector-python==8.1.0

pip install PyMySQL==1.1.0


导入:

import mysql.connector

import datetime


本次很简单,只分为两部分:

第一部分 自动创建数据库

第二部分 导入SQL文件

在实现以上两个部分前,要先连接MySql,和上篇导出区别的地方是,本次没有数据库,所以只是连接通MySql即可

连接MySql:

# 创建到MySQL的连接
db_config = {
    'host': '127.0.0.1',
    'user': 'root',
    'password': '123456',
    'port': 3306
}
# 连接MySql
cnx = mysql.connector.connect(**db_config)
cursor = cnx.cursor()
print(cursor)

结果:

说明已经连接成功~!

那么接下来就开始……

第一部分

自动创建数据库

创建数据库是首要前提

确定数据库的名称,尽量避免与其他数据库重名。

# 定义数据库名称
db_name = 'self_test_aa'

以防万一重名,做一个判断重名并删除的操作

# 检查数据库是否已存在
cursor.execute("SHOW DATABASES LIKE %s", (db_name,))
if cursor.fetchone() is not None:
    # 数据库已存在,则删除
    drop_db = f"DROP DATABASE IF EXISTS {db_name};"
    cursor.execute(drop_db)

最后执行创建

# 创建新的数据库
cursor.execute('CREATE DATABASE {db_name} CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci'.format(db_name=db_name))

第二部分

导入SQL文件

首先,切到新创建的数据库下面

cursor.execute(f"USE {db_name}")

然后,导入SQL文件

换个直白的说法,就是把SQL文件中内容读出来,再执行到MySql中

# 导入SQL文件
with open('database.sql', 'r', encoding='utf-8') as f:
    sql_statements = f.read().split(';')
    for sql_statement in sql_statements:
        if sql_statement.strip():
            cursor.execute(sql_statement)
            while cursor.nextset():
                pass

cnx.commit()

最后,关闭连接

# 关闭连接
cursor.close()
cnx.close()

总结

阅读本篇,建议先看一下上篇分享,毕竟本次使用的’database.sql’是上篇输出的。在实践中,也是和上篇一起使用的。

源码:

# -*- coding: utf-8 -*-
import mysql.connector

# 创建到MySQL的连接
db_config = {
    'host': '127.0.0.1',
    'user': 'root',
    'password': '123456',
    'port': 3306
}
# 连接MySql
cnx = mysql.connector.connect(**db_config)
cursor = cnx.cursor()

# 定义数据库名称
db_name = 'self_test_aa'
# 检查数据库是否已存在
cursor.execute("SHOW DATABASES LIKE %s", (db_name,))
if cursor.fetchone() is not None:
    # 数据库已存在,则删除
    drop_db = f"DROP DATABASE IF EXISTS {db_name};"
    cursor.execute(drop_db)
# 创建新的数据库
cursor.execute('CREATE DATABASE {db_name} CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci'.format(db_name=db_name))

# 切到新创建的数据库下面
cursor.execute(f"USE {db_name};")
# 导入SQL文件
with open('database.sql', 'r', encoding='utf-8') as f:
    sqls = f.read().split(';')
    for sql in sqls:
        if sql.strip():
            cursor.execute(sql)
            while cursor.nextset():
                pass
cnx.commit()

# 记住关闭连接
cursor.close()
cnx.close()

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述
若有侵权,请联系删除
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值