【问题标题】:How to read a SQL file with python with proper character encoding?如何使用具有正确字符编码的 python 读取 SQL 文件?
【发布时间】:2018-05-22 03:47:21
【问题描述】:

基于几个示例(herehere),我可以使用 psycopg2 读取并希望从 python 运行 SQL 文件(该文件有 200 行,虽然运行速度很快,但不是我想要的在 python 文件中维护)。

这是读取和运行文件的脚本:

sql = open("sql/sm_bounds_current.sql", "r").read()

curDest.execute(sql)

但是,当我运行脚本时,会抛出以下错误:

Error: syntax error at or near "drop"
LINE 1: drop table dpsdata.sm_boundaries_current_dev;

如您所见,脚本中的第一行是删除一个表,但我不确定为什么要读取额外的字符,并且似乎找不到可能设置编码的解决方案读取文件时。

【问题讨论】:

  • 10:1 该文件已被不可靠的文本编辑器损坏。 "utf8: BOM 被认为是有害的"
  • @Jasen 嗯,我只是在使用 PGAdmin3 - 我会看看是否可以检查任何其他阅读器/编写器以获得更好的方法......

标签: python postgresql psycopg2


【解决方案1】:

发现 this post 处理编码和字节顺序标记,这就是我的问题所在。

解决方案是从 CODECS 导入 OPEN,它允许在 OPEN 上使用 ENCODING 选项:

import codecs
from codecs import open

sqlfile = "sql/sm_bounds_current.sql"
sql = open(sqlfile, mode='r', encoding='utf-8-sig').read()
curDest.execute(sql)

看起来效果不错!

【讨论】:

  • 哦哇...谢谢!我有一个类似的问题,强制编码为 utf-8 似乎也对我有用,即使文件已经是 utf-8 unicode。
  • @ray_voelker 太棒了!!
  • 很好 :) 这对我也有用! Ps:没有import codecs -part,它已经可以工作了,所以如果你愿意,你可以选择把它拿出来:)
猜你喜欢
  • 2012-08-19
  • 2016-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多