【发布时间】:2019-05-26 15:41:17
【问题描述】:
版本: PostgreSQL = 11.3 Python = 3.7.3
我有一个 python 脚本,它从网络收集数据并将其存储在数据库中以供进一步分析。
下面的 sql 语句在尝试比较从 Web 获取的变量与数据库中已经存在的变量时总是返回 false。我认为这是因为变量的编码不匹配而发生的。
例如,变量 = Σ1,而 Σ1 已经存在于数据库中,所以下面的 sql 语句应该返回 TRUE 而不是返回 FALSE。
cur.execute("SELECT EXISTS(SELECT 1 FROM table_name WHERE column_name = %s)", (variable,))
当我运行“cur.query”时,它显示正在执行以下查询:
b"SELECT EXISTS(SELECT 1 FROM table_name WHERE column_name = '\xce\xa31')"
在 pgadmin4 中,变量正确存储为 Σ1。如果我直接在 pgadmin4 中使用“Σ1”运行上面的 sql 查询,它会按预期返回 true。 但是,当我从 python 脚本查询该变量是否已存在于数据库中时,它会返回 false,因为它将数据库中的“Σ1”与 sql 查询中的“\xce\xa31”进行比较。
当我运行“show CLIENT_ENCODING;”时在 pgadmin4 中显示“UTF8”,当我在脚本中的 sql 语句之前立即打印“print(conn.encoding)”时,它也显示“UTF8”。
我哪里出错了?
【问题讨论】:
标签: python sql postgresql pgadmin-4