版本: Postgresql = 11.3 Python = 3.7.3
我有一个python脚本,它从web收集数据,并将其存储在数据库中以供进一步分析。
当下面的sql语句尝试将从web获取的变量与数据库中已存在的变量进行比较时,它总是返回false。我认为发生这种情况是因为变量的编码不匹配。
例如,变量=SQL1,而SQL1已经存在于数据库中,因此下面的Σ语句应该返回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中,变量被正确地存储为SQL1。如果我直接在pgadmin4中使用"Σ1“运行上面的Σ查询,它会像预期的那样返回true。但是,当我从python脚本查询该变量是否已经存在于数据库中时,它返回false,因为它正在将数据库中的“SQL1”与Σ查询中的"\xce\xa31“进行比较。
当我在pgadmin4中运行"show sql;“时,它显示"UTF8”,当我在脚本中紧跟在sql语句之前打印" print (conn.encoding)“时,它也显示"UTF8”。
我哪里错了?
发布于 2019-05-27 00:56:33
如果我这样做:
>>> b"SELECT EXISTS(SELECT 1 FROM table_name WHERE column_name = '\xce\xa31')".decode("utf-8")
"SELECT EXISTS(SELECT 1 FROM table_name WHERE column_name = 'Σ1')"它表明您没有做错任何事情。您看到的返回显示的查询显示为UTF-8字节,但它与您想要的Unicode查询完全相同。我怀疑数据库中的希腊符号并不是您的select所期望的。这可能是因为实际上有几个Unicode sigma符号: U+03A3、U+2211和一些others besides。
https://stackoverflow.com/questions/56314973
复制相似问题