【发布时间】:2011-08-17 19:49:02
【问题描述】:
我在清理现有 sql 文件中的 cmets 和空行时遇到问题。 该文件有超过 10k 行,因此不能手动清理它。
我有一个小 Python 脚本,但我不知道如何处理多行插入中的 cmets。
代码:
f = file( 'file.sql', 'r' )
t = filter( lambda x: not x.startswith('--') \
and not x.isspace()
, f.readlines() )
f.close()
t #<- here the cleaned data should be
它应该如何工作:
这应该清洗:
-- normal sql comment
这应该保持原样:
CREATE FUNCTION func1(a integer) RETURNS void
LANGUAGE plpgsql
AS $$
BEGIN
-- comment
[...]
END;
$$;
INSERT INTO public.texts (multilinetext) VALUES ('
and more lines here \'
-- part of text
\'
[...]
');
【问题讨论】:
-
你能记录下你通过了多少非转义引号吗?奇数表示注释是字符串的一部分,因此不应删除。
-
但它仍然会从存储过程中删除 cmets
-
我有点跑题了,但也许你真正的问题是你的 SQL 文件是 10K 行。或者您没有使用版本控制。或两者。像我们的流程这样的东西可能会对您有所帮助。请参阅我对stackoverflow.com/questions/5330065/…的回答
-
@Catcall 我两者都有,该文件是由几个较小的文件生成的,但是对于生产环境部署,不需要 cmets(它们大约占文件的 60%)
-
更改生成文件可能更容易。跳过从函数和存储过程中删除 cmets 肯定更容易——只是不要将“删除 cmets”代码添加到构建函数的 make 部分(或充满函数的文件)。
标签: python sql postgresql text-parsing