我在Python中使用Pandas Read Sql在IBM DB2中执行sql语句并将repsonse保存在pandas数据帧中。现在我正在尝试执行一个包含非ASCII字符的sql语句,这是瑞典字母表中的一个字母:'Å'(其他是Å,Ä和Ö)但是我收到了这个错误:
“DatabaseError:sql上的执行失败'SELECT * FROM DATA_CONFIG WHERE TAG_NAME ='Å'':ibm_db_dbi ::错误:处理语句时出错”
这是我的代码:
import ibm_db
import ibm_db_dbi
import pandas as pd
def sqlToFrame(sql): # Function for creating pandas dataframes from SQL-statements
con = ibm_db.connect(connection_string, "", "")
conn = ibm_db_dbi.Connection(con)
return pd.read_sql(sql, conn)
df = sqlToFrame("SELECT * FROM DATA_CONFIG WHERE TAG_NAME='Å'")
我已经尝试在IBM DB2界面中的IDE中执行该语句,该方法非常正常。因此,我认为问题可能与我如何建立连接/ DB2驱动程序pandas使用有关。我试图找到一种方法来设置编码,但找不到任何东西。我怎么解决这个问题?我也知道这是可能的,因为构建在ibm_db上的另一个包接受这些字符。这些字符来自ISO-8859-1 series
答案 0 :(得分:1)
考虑使用pandas.read_sql
的 params 参数参数化您的查询,并将带有'Å'
前缀的重音字符u''
传递给不带引号的{{1 SQL查询中的占位符。注意:params需要一个序列,所以下面传递一个项目的元组。
与Python 2.x不同,Python 3.x中的所有字符串都是Unicode字符串,因此重音文字(非ascii)不需要使用?
进行显式解码。因此,为什么我无法在运行带有重音字符的DB2 SQL查询的Python 3.5中重现您的问题。
u'...'