gpt4 book ai didi

Python OS PostgreSQL 和报价

转载 作者:行者123 更新时间:2023-11-28 22:58:40 24 4
gpt4 key购买 nike

我可以在这里找到很多关于 PSQL 中的引号的内容,但没有找到适合这个问题的内容。

首先,这是一个拼凑。我知道这是一个问题,但我认为我坚持使用它(尽管对其他替代方案持开放态度)

我有一个近乎黑盒的第三方 linux 设备,我对其访问权限有限,我可以使用 bash、python 和 psql。我没有 psycopg2 或任何其他 pg 库。

我必须使用的数据库使用需要引用的区分大小写的表名(不要问...)

所以,目前我编写 OS shell 命令来获取数据,然后我摆弄这些数据并将其转换为 JSON 以满足我的需要

一个简单的例子:

pg_str = "psql -U pword dbname -A -t -c "
sql = "SELECT * FROM \"Addresses\" WHERE id=999"
os_str = pg_str + "\'" + sql + "\'" + ";"
data = string.split(os.popen(os_str).read())

没问题。我并不是说它很漂亮,但它确实有效(记住我不能导入任何数据库库...)

当我在文本字段上有一个 where 子句时,一切都出错了:

pg_str = "psql -U pword dbname -A -t -c "
sql = "SELECT * FROM \"Addresses\" WHERE town='london'"
os_str = pg_str + "\'" + sql + "\'" + ";"
data = string.split(os.popen(os_str).read())

引号组合太多无法处理...?

我显然已经尝试了很多转义组合并且已经在谷歌上搜索了几个小时,但每个解决方案似乎都需要我无法访问的库。

我不是 python 或 psql 专家 - 这是我目前的极限。我确信我正在以错误的方式去做,但目前在找出正确的方法时被打败了......

最佳答案

  1. 不需要 \ 转义 " 字符串中的 ' 字符。
  2. 您可以使用 """ 字符串来避免转义 " 字符。
  3. 使用 string.replace 为 shell 引用 ' 字符,将它们替换为 '\''。传递给 shell 时,生成的字符串需要被未转义的 ' 字符包围。

使用这些规则,可以使 SQL 字符串易于阅读和编辑:

pg_str = "psql -U pword dbname -A -t -c "
sql = """SELECT * FROM "Addresses" WHERE town='london'"""
sql = sql.replace("'", "'\\''")
os_str = pg_str + "'" + sql + "'" + ";"
data = string.split(os.popen(os_str).read())

关于Python OS PostgreSQL 和报价,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13637530/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com