在使用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 function查看字符串是否存在问题。它将尝试插入任何参数,因此可以是一个很好的检查。因为我没有一个游标对象来调用它,所以我改为:
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接受查询,但它可能无法为你的null值提供你想要的东西。 documentation建议如果你可以整理插值,它应该工作。