python - 使用 Psycopg2 将数据从 S3 复制到 AWS Redshift 时出错
问题描述
在使用 psycopg2 执行 COPY 命令时,我收到错误:
psycopg2.ProgrammingError: unterminated quoted string at or near "'"
LINE 12: NULL as '
这是我的原始查询:
"""copy dcm_floodlight_raw_abg_stg (COLUMN_NAMES)
from 'S3_BUCKET_PATH'
CREDENTIALS 'aws_access_key_id=KEY;aws_secret_access_key=SECRET'
gzip
DELIMITER '\t'
DATEFORMAT as 'yyyy-mm-dd'
BLANKSASNULL
TRUNCATECOLUMNS
FILLRECORD
MAXERROR 100
ACCEPTINVCHARS as '?'
NULL as '\0';"""
不太清楚为什么我会收到此错误,因为它不会为任何其他单引号引发此错误。
解决方案
当查询出现问题时,您可以使用psycopg2 mogrify 函数来查看您的字符串是否存在问题。它也会尝试插入任何参数,因此可以很好地检查。因为我没有光标对象来调用它,所以我这样做了:
print psycopg2.extensions.adapt(YOUR_QUERY).getquoted()
在您的情况下,这给出了:
>>> import psycopg2
>>> print psycopg2.extensions.adapt(YOUR_QUERY).getquoted()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: A string literal cannot contain NUL (0x00) characters.
>>> print psycopg2.extensions.adapt('\\0').getquoted()
'\\0'
>>>
所以你可以看到它不喜欢'\0'
. 如果您按照 John Rotenstein 的建议转义反斜杠,则 psycopg2 将接受查询,但它可能无法为您提供您想要的空值。文档建议如果您可以整理插值,它应该可以工作。
推荐阅读
- c# - 如何在 Razor 中动态设置变量?
- postgresql - How to find postgresql query which is consuming the most I/O
- ruby-on-rails - AWS 运行 Rails 应用程序的架构指南(Web/Worker 设置)
- python - 使用 chunksize 从 read_sql_query 读取数据时将计数保留在变量中
- ios - 在当前操作之后将集合视图的委托设置为 self
- c# - 当一个条目具有多个属性时对列表进行排序?
- python - 无法获取所有子项(动态加载)硒 python
- excel - VBA 无法添加对指定 Word 模板的引用
- javascript - 如何使用航点滚动滚动到特定元素?
- node.js - 使用请求模块使用 node.js 将数据发布到 mojang api