执行.sql文件生成数据
处理.sql
文件,起初以为pymysql
库可以直接执行.sql
文件的,踩坑后才发现,它是不支持直接执行sql
文件。
解决方法,就是读取.sql
文件中的数据,进行处理后提取sql
语句,循环去执行并提交。
第一步:获取数据库是否存在
先进行数据库连接,查询数据库并获取数据库名称,根据名称是否存在来执行是否新建数据库,代码如下:
def _show_databases_and_create(self):
"""
查询数据库是否存在,不存在则进行新建操作
:return:
"""
connection = pymysql.connect(host=self._host, port=self._port, user=self._user, password=self._password,
cursorclass=pymysql.cursors.DictCursor)
with connection:
with connection.cursor() as cursor:
cursor.execute('show databases;')
result = cursor.fetchall()
results = self._database not in tuple(x["Database"] for x in result)
if results:
with connection.cursor() as cursor:
cursor.execute(f'create database {self._database};')
with connection.cursor() as cursor:
cursor.execute('show databases;')
result = cursor.fetchall()
results = self._database in tuple(x["Database"] for x in result)
return results if results else result
else:
return True
参数解释:
cursorclass=pymysql.cursors.DictCursor
:指定返回的是字典类型数据results = self._database not in tuple(x["Database"] for x in result)
:生成器获取数据库名称,使用not in
获取数据库名是否在元组中return results if results else result
:如果results
为真则返回一个True
,如果为假则返回result
结果
第二步:获取sql文件并处理数据
处理完数据库创建后,开始读取.sql
文件,部分.sql
文件内容:
Source Server : docker-lms-mysql
Source Server Version : 50651
Source Host : 192.168.123.