python:执行.sql文件生成表和数据

本文介绍了如何使用Python的pymysql库处理.sql文件,创建数据库和表。由于pymysql不直接支持执行文件,所以需要读取文件内容,处理注释和特殊字符,然后逐条执行SQL语句。代码示例中展示了数据库连接、文件读取和SQL语句处理的过程,以及如何封装成可调用的方法。
摘要由CSDN通过智能技术生成

执行.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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值