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

文摘   科技   2023-11-14 18:40   北京  


ISEE小语


“宴笑友朋多,患难知交寡。” ——蒲松龄




回顾上篇



Python实现MySql数据库导出表结构和数据功能-实例

ISEE小栈,公众号:ISEE小栈Python实现MySql数据库导出表结构和数据功能-实例


开始本篇


继上篇分享的【导出数据库的表结构和数据功能实现】,本篇分享自动创建数据库和自动导入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}# 连接MySqlcnx = 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}# 连接MySqlcnx = 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(): passcnx.commit()
# 记住关闭连接cursor.close()cnx.close()

(左右滑动查看完整代码)



有兴趣的同学,可试之~!




寄语:世间三美,明月,清风,眼前……



看到这儿的朋友帮点个“”和“在看”,谢谢支持~!

     

文章就分享到这儿,喜欢就点个吧!




推荐阅读  点击标题可跳转


ISEE小栈
没有花里胡哨,简单才是王道。
 最新文章