我可以用两个CLI命令来更新这个列:
psql -U postgres
UPDATE taskt SET update= '[{"id": 0, "timestamp": "2019-12-17T22:16:28.985Z", "statusUpdate": "three little piggies"}]' WHERE uri = '/rest/tasks/xyz';
这工作得很好,但我打算在python中运行命令,做一些类似子进程的事情。check_output(cli_0 +“&”+ cli_1, shell=True)导致认为第二个命令是bash命令。我理想的做法是:
psql -U postgres -c "UPDATE taskt SET update= '[{"id": 0, "timestamp": "2019-12-17T22:16:28.985Z", "statusUpdate": "three little piggies"}]' WHERE uri = '/rest/tasks/xyz';"
但是字典里的双引号有点扼杀了这种想法。把它们变成单引号也不行。任何建议都是非常有用的。我可以访问python3.5,但是我不能安装任何东西。 问题来源StackOverflow 地址:/questions/59385942/cant-update-dictionarys-column-in-postgres-db-because-of-double-quotes
你应该能够反斜杠转义内部双引号:
psql -U postgres -c "UPDATE taskt SET update= '[{\"id\": 0, \"timestamp\": \"2019-12-17T22:16:28.985Z\", \"statusUpdate\": \"three little piggies\"}]' WHERE uri = '/rest/tasks/xyz';"
否则,你可以保存文件并运行:
cat <<_EOF_ > /tmp/myfile
> UPDATE taskt SET update= '[{"id": 0, "timestamp": "2019-12-17T22:16:28.985Z", "statusUpdate": "three little piggies"}]' WHERE uri = '/rest/tasks/xyz';
> _EOF_
psql -U postgres < /tmp/myfile
你还应该能够做一个heredoc直接到psql:
psql postgres postgres <<_EOF_
> select 1;
> _EOF_
?column?
----------
1
(1 row)
psql U postgres <<_EOF_
UPDATE taskt SET update= '[{"id": 0, "timestamp": "2019-12-17T22:16:28.985Z", "statusUpdate": "three little piggies"}]' WHERE uri = '/rest/tasks/xyz';
_EOF_
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。