首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用希腊字母和UTF-8的Python SQL语句

问使用希腊字母和UTF-8的Python SQL语句
EN

Stack Overflow用户
提问于 2019-05-26 23:41:18
回答 1查看 110关注 0票数 0

版本: Postgresql = 11.3 Python = 3.7.3

我有一个python脚本,它从web收集数据,并将其存储在数据库中以供进一步分析。

当下面的sql语句尝试将从web获取的变量与数据库中已存在的变量进行比较时,它总是返回false。我认为发生这种情况是因为变量的编码不匹配。

例如,变量=SQL1,而SQL1已经存在于数据库中,因此下面的Σ语句应该返回TRUE,但返回FALSE。

代码语言:javascript
复制
cur.execute("SELECT EXISTS(SELECT 1 FROM table_name WHERE column_name = %s)", (variable,))

当我运行"cur.query“时,它显示正在执行以下查询:

代码语言:javascript
复制
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”。

我哪里错了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-27 00:56:33

如果我这样做:

代码语言:javascript
复制
>>> 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。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56314973

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档