gpt4 book ai didi

python - 最有效的 psycopg2 python 转义函数

转载 作者:太空宇宙 更新时间:2023-11-03 18:18:43 25 4
gpt4 key购买 nike

我目前正在尝试使用 (copy_from) 与 psycopy2 进行批量插入。目前我的代码如下。我希望获得一些有关最有效的转义函数和转义包含受限制字符的值的最佳实践的建议。我使用的是python3,字符串来自mongodb。

此处引用了受限制的字符: http://www.postgresql.org/docs/9.2/static/sql-copy.html从文档中摘取:“可以在 COPY 数据中使用反斜杠字符 () 来引用可能被视为行或列分隔符的数据字符。特别是,如果以下字符作为列值的一部分出现,则必须在其前面添加反斜杠:反斜杠本身、换行符、回车符和当前分隔符。”

def bulk_write(self, table, data, columns = None):
with psycopg2.connect(database = self.database,
user = self.user,
host = self.host,
password = self.password) as conn:
with conn.cursor() as cur:
cur.execute("SET TIME ZONE 'PDT8PST';")
cols_import = tuple(columns) if columns else None
data_tsv = '\n'.join(['\t'.join(self.escape_copy_string(str(value)) for value in row) for row in data])
with open("test","w") as f:
f.write(data_tsv)
cur.copy_from(io.StringIO(data_tsv), table, columns=cols_import, null="None")

def escape_copy_string(self,s):
s = s.replace("\\","\\\\").replace("\n","\\n").replace("\r","\\r").replace("\t","\\t")
return s

最佳答案

我建议使用 csv 模块,并在 csv 模式下使用 copy_from,而不是手动滚动它。

如果您使用列表推导式来处理数据,数据也不会那么大。做任何大的事情时,你都会很快耗尽内存。考虑使用一个循环来写入每一行。

关于python - 最有效的 psycopg2 python 转义函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24589738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com