python - Postgres : unterminated quoted string at or near using psycopg2

标签 python json postgresql

我有一个包含两个表 stream_239_1_1_1_1234_0stream_239_0_0_40_1234_0 的 postgres 数据库。每个表都有一个名为 alarm 的列。我正在使用 psycopg2 Python 客户端将数据保存到这些表中。

我在stream_239_1_1_1_1234_0中插入数据没问题,如下:

INSERT INTO stream_239_1_1_1_1234_0 (alarm) VALUES ('{"delay_max":
0.0, "ts_errors": [{"count": 0, "state": 0, "is_priority1": true, "name": "SYNC", "is_priority2": false}, {"count": 0, "state": 0,
"is_priority1": true, "name": "BYTE", "is_priority2": false},
{"count": 0, "state": 0, "is_priority1": true, "name": "PAT",
"is_priority2": false}, {"count": 0, "state": 0, "is_priority1": true,
"name": "CC", "is_priority2": false}, {"count": 0, "state": 0,
"is_priority1": true, "name": "PMT", "is_priority2": false}, {"count":
0, "state": 0, "is_priority1": true, "name": "PID", "is_priority2":
false}, {"count": 0, "state": 0, "is_priority1": false, "name": "TS",
"is_priority2": true}, {"count": 0, "state": 0, "is_priority1": false,
"name": "CRC", "is_priority2": true}, {"count": 0, "state": 0,
"is_priority1": false, "name": "PCR", "is_priority2": true}, {"count":
0, "state": 0, "is_priority1": false, "name": "ACC", "is_priority2":
true}, {"count": 0, "state": 0, "is_priority1": false, "name": "PTS",
"is_priority2": true}, {"count": 0, "state": 0, "is_priority1": false,
"name": "CAT", "is_priority2": true}], "is_stream_paused": false,
"delay_min": 0.0, "ac_err": 0.0, "oj_err":
0.0,"ipm_errors":[{"mnv":-3017, "mxv":2996, "mev":0, "mi":1000, "cr":0, "Bps":276667.104687, "df":4919, "pkl":0, "oos":0, "rei":0,
"reo":0, "ncl":0.0, "slf":0.0, "mtl":0.0, "ld":0, "lpl":0, "lr":0.0}],
"timestamp": "2017:02:16:16:10:49","id3_data": "None"}');

而我在这个查询中遇到了这个错误

INSERT INTO stream_239_0_0_40_1234_0 (alarm) VALUES ('{"delay_max":
0.0, "ts_errors": [{"count": 0, "state": 0, "is_priority1": true, "name": "SYNC", "is_priority2": false}, {"count": 0, "state": 0,
"is_priority1": true, "name": "BYTE", "is_priority2": false},
{"count": 0, "state": 0, "is_priority1": true, "name": "PAT",
"is_priority2": false}, {"count": 0, "state": 0, "is_priority1": true,
"name": "CC", "is_priority2": false}, {"count": 0, "state": 0,
"is_priority1": true, "name": "PMT", "is_priority2": false}, {"count":
0, "state": 0, "is_priority1": true, "name": "PID", "is_priority2":
false}, {"count": 0, "state": 0, "is_priority1": false, "name": "TS",
"is_priority2": true}, {"count": 0, "state": 0, "is_priority1": false,
"name": "CRC", "is_priority2": true}, {"count": 0, "state": 0,
"is_priority1": false, "name": "PCR", "is_priority2": true}, {"count":
0, "state": 0, "is_priority1": false, "name": "ACC", "is_priority2":
true}, {"count": 0, "state": 0, "is_priority1": false, "name": "PTS",
"is_priority2": true}, {"count": 0, "state": 0, "is_priority1": false,
"name": "CAT", "is_priority2": true}], "is_stream_paused": false,
"delay_min": 0.0, "ac_err": 0.0, "oj_err":
0.0,"ipm_errors":[{"mnv":-140, "mxv":143, "mev":0, "mi":1000, "cr":0, "Bps":697856.570014, "df":0, "pkl":0, "oos":0, "rei":0, "reo":0,
"ncl":0.0, "slf":0.0, "mtl":0.0, "ld":0, "lpl":0, "lr":0.0}],
"timestamp": "2017:02:16:16:16:43","id3_data": [{"Payload":
"2016:05:12T11:47:41:000z", "id3_timestamp":
"2017:02:16:21:16:40"}]}');

错误是:

unterminated quoted string at or near "'{"delay_max": 0.0, "ts_errors": [{"count": 0, "state": 0, "is_priority1": true, "name": "SYNC", "is_priority2": false}, {"count": 0, "state": 0, "is_priority1": true, "name": "BYTE", "is_priority2": false}, {"count": 0, "state": 0, "is_priority1": true, "name": "PAT", "is_priority2": false}, {"count": 0, "state": 0, "is_priority1": true, "name": "CC", "is_priority2": false}, {"count": 0, "state": 0, "is_priority1": true, "name": "PMT", "is_priority2": false}, {"count": 0, "state": 0, "is_priority1": true, "name": "PID", "is_priority2": false}, {"count": 0, "state": 0, "is_priority1": false, "name": "TS", "is_priority2": true}, {"count": 0, "state": 0, "is_priority1": false, "name": "CRC", "is_priority2": true}, {"count": 0, "state": 0, "is_priority1": false, "name": "PCR", "is_priority2": true}, {"count": 0, "state": 0, "is_priority1": false, "name": "ACC", "is_priority2": true}, {"count": 0, "state": 0, "is_priority1": false, "name": "PTS", "is_priority2": true}, {"count": 0, "state": 0, "is_priority1": false, "name": "CAT", "is_priority2": true}], "is_stream_paused": false, "delay_min": 0.0, "ac_err": 0.0, "oj_err": 0.0,"ipm_errors":[{"mnv":-140, "mxv":143, "mev":0, "mi":1000, "cr":0, "Bps":697856.570014, "df":0, "pkl":0, "oos":0, "rei":0, "reo":0, "ncl":0.0, "slf":0.0, "mtl":0.0, "ld":0, "lpl":0, "lr":0.0}], "timestamp": "2017:02:16:16:16:43","id3_data": [{"Payload": "2016:05:12T11:47:41:000z" LINE 1: ...ERT INTO stream_239_0_0_40_1234_0 (alarm) VALUES ('{"delay_m...

如果我尝试从 postgres shell 手动运行查询,它工作正常! 我看了一下 this question但我不确定它与我的案子有什么关系。 psycopg2 Python 客户端已经可以很好地处理第一个查询了!

有什么建议吗?

编辑 {"ac_err": 0.0, "oj_err": 0.0, "id3_data": [{"有效载荷": "2016:05:12T11:47:41:000z", "id3_timestamp": "2017:02: 16:21:16:40"}], "delay_max": 0.0, "delay_min": 0.0, "timestamp": "2017:02:16:16:16:43", "ts_errors": [{"name":“SYNC”,“count”:0,“state”:0,“is_priority1”:true,“is_priority2”:false},{“name”:“BYTE”,“count”:0,“state”:0 , "is_priority1": true, "is_priority2": false}, {"name": "PAT", "count": 0, "state": 0, "is_priority1": true, "is_priority2": false}, {"name": "CC", "count": 0, "state": 0, "is_priority1": true, "is_priority2": false}, {"name": "PMT", "count": 0, "state": 0, "is_priority1": true, "is_priority2": false}, {"name": "PID", "count": 0, "state": 0, "is_priority1": true, "is_priority2": false}, {"name": "TS", "count": 0, "state": 0, "is_priority1": false, "is_priority2": true}, {"name": "CRC", "count": 0, "state": 0, "is_priority1": false, "is_priority2": true}, {"name": "PCR", "count": 0, "state": 0, "is_priority1": false, "is_priority2": true }, {“姓名": "ACC", "count": 0, "state": 0, "is_priority1": false, "is_priority2": true}, {"name": "PTS", "count": 0, "state": 0, "is_priority1": false, "is_priority2": true}, {"name": "CAT", "count": 0, "state": 0, "is_priority1": false, "is_priority2": true}], “ipm_errors”:[{“cr”:0,“df”:0,“ld”:0,“lr”:0.0,“mi”:1000,“Bps”:697856.570014,“lpl”:0,“mev “:0,“mnv”:-140,“mtl”:0.0,“mxv”:143,“ncl”:0.0,“oos”:0,“pkl”:0,“rei”:0,“reo” : 0, "slf": 0.0}], "is_stream_paused": false

编辑 我找到了答案,我会发布

最佳答案

问题基本上出在“Payload”中形成 JSON 的字符串的编码:“2016:05:12T11:47:41:000z”。

此有效负载来自 C++ 函数,并被传递到 Python 端。它代表分组数据。出于某种原因,有效载荷有一个奇怪的编码。尽管我确定有效载荷是字符串格式并且对象是有效的 JSON 格式,但 psycopg2 无法识别这种编码,这证明了我能够手动运行查询的原因。我通过删除有效负载数据末尾的 Null 终止字符解决了这个问题

关于python - Postgres : unterminated quoted string at or near using psycopg2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42284940/

相关文章:

python - Python 中的 Dickey-Fuller 测试

python - 无需端口转发的点对点套接字通信

python - 如何将 JSON 数据中的值插入表中

ios - 如何在 Alamofire 中使用 header 中的 Token 和基本身份验证发出请求?

sql - 查找 PostgreSQL 表中数据的统计信息。每列的唯一计数和最高频率

mysql - Sequelize 原始查询以将数据作为数组返回

python - 背景虚化 | Jupyter 笔记本 | python |情节不显示

python - SqlAlchemy Flask 中列的参数

java - json中的双引号简单

node.js - Sequelize -自动 : Changing Postgres Table Schemas