我在处理一个SQL文件时遇到了一些问题,这个SQL文件是我数据库中的eport
以下是出口的详细情况:
-- MySqlBackup.NET 2.0.9.2
-- Dump Time: 2019-06-07 02:53:03
-- --------------------------------------
-- Server version 5.7.19 MySQL Community Server (GPL)我的问题是,在这个sql文件上运行regex时,regex什么也找不到,即使regex很好,并且在这里进行了在线测试:https://regex101.com/r/iIEKQh/1/。
正则表达式是:(使用re )
pattern2 = re.compile(r"(FOREIGN_KEY_CHECKS)")
print(pattern2.search(FILE))结果总是None。
这是我正在浏览的文本:
-- MySqlBackup.NET 2.0.9.2
-- Dump Time: 2019-06-07 02:53:03
-- --------------------------------------
-- Server version 5.7.19 MySQL Community Server (GPL)
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;因为我想在没有外键检查的情况下导入数据库中的这个文件,所以我想取消对文件中这一行/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;的注释,这样它才能正常工作。
我在网上找不到任何帮助我的东西,MySQL不想在命令行中添加-禁用-外键选项.
编辑:问题在于,在中,在查找python时,pattern2.search(FILE) ()查找FILE上的模式(即c:/.)。这就是为什么它找不到任何东西,因为它没有通过文件本身。
我的问题是:那么如何从SQL文件中删除注释呢?
发布于 2019-06-12 08:57:52
您可以使用re.sub替换匹配的对象。
Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:06:47) [MSC v.1914 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> pattern = re.compile(r'/\*(.*FOREIGN_KEY_CHECKS.*)\*/')
>>>
>>> sample_string = """
... -- MySqlBackup.NET 2.0.9.2
... -- Dump Time: 2019-06-07 02:53:03
... -- --------------------------------------
... -- Server version 5.7.19 MySQL Community Server (GPL)
... /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
... /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
... /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
... /*!40101 SET NAMES utf8 */;
... /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
... /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
... /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
... /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
... """
>>>
>>> def uncomment(match_obj):
... return match_obj.group(1)
...
>>> print(re.sub(pattern, uncomment, sample_string))
-- MySqlBackup.NET 2.0.9.2
-- Dump Time: 2019-06-07 02:53:03
-- --------------------------------------
-- Server version 5.7.19 MySQL Community Server (GPL)
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 ;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;https://stackoverflow.com/questions/56556762
复制相似问题