使用pandas read_sql的Python编码问题

使用pandas read_sql的Python编码问题,python,python-3.x,pandas,pyodbc,Python,Python 3.x,Pandas,Pyodbc,因此,我尝试将两个字符串编码为utf-8,以便将它们用于pandas.read_sql: selectedTable = "ACC__AccountCodes" baseSql = "SELECT * FROM FileMaker_Fields WHERE TableName=" 现在当我编码这两件事: baseSql.encode('utf-8') selectedTable.encode('utf-8') sqlString = "{}{}".format(baseSql, selecte

因此,我尝试将两个字符串编码为utf-8,以便将它们用于pandas.read_sql:

selectedTable = "ACC__AccountCodes"
baseSql = "SELECT * FROM FileMaker_Fields WHERE TableName="
现在当我编码这两件事:

baseSql.encode('utf-8')
selectedTable.encode('utf-8')
sqlString = "{}{}".format(baseSql, selectedTable)
我的输出如下所示:

b'从TableName='b'A\x00C\x00C\x00\x00\x00A\x00C\x00C\x00C\x00o\x00u\x00n\x00t\x00C\x00o\x00d\x00e\x00s\x00''的文件生成器字段中选择*

因此,当我在编码设置为“latin1”的情况下运行它时,我得到了错误:

pandas.io.sql.DatabaseError: Execution failed on sql 'SELECT * FROM FileMaker_Fields WHERE TableName=ACC__AccountCodes': ('HY000', '[HY000] [\x00F\x00i\x00l\x00e\x00M\x00a\x00k\x00e\x00r\x00]\x00[\x00F\x00i\x00l\x00e\x00M\x00a\x00k\x00e\x00r\x00]\x00 \x00F\x00Q\x00L\x000\x000\x000\x007\x00/\x00(\x001\x00:\x004\x007\x00)\x00:\x00 \x00T\x00h\x00e\x00 \x00c\x00o\x00l\x00u\x00m\x00n\x00 \x00n\x00a\x00m\x00e\x00d\x00 \x00"\x00A\x00"\x00 \x00d\x00o\x00e\x00s\x00 \x00n\x00o\x00t\x00 \x00e\x00x\x00i\x00s\x00t\x00.....

我似乎找不到任何解决这个问题的方法。我所做的一切都让我回到了这一点,这导致了无效语法的sql错误。我正在使用pyodbc,它期望utf-8编码作为输入。想法?

您不必将它们编码为utf-8;尝试将它们作为普通字符串传递给pandas
read\u sql
函数,它应该可以正常工作,如果不行,那么您在其他地方遇到了问题。。。但是编码并不是你想要的

Pyodbc
正常接受查询中的unicode字符串,因此这根本不是您的问题


我还建议阅读包含某些数据库的特定unicode配置的,尽管在您的案例中,我不认为这是一个问题,因为它与数据库驱动程序编码有关,而不是与sql查询有关,sql查询每次都应该是一个普通的unicode字符串。

编辑了我的问题。我使用的是pyodbc,它期望utf-8编码作为输入。@L.Norman您的假设是错误的。我还使用了
pyodbc
,它可以很好地处理普通的unicode字符串。显示您的代码以及使用普通unicode字符串时出现的错误。为什么要首先设置编码?我相信我的数据库输出中包含utf字符。编辑我的帖子你不需要显式编码。我最近在Windows上用FileMaker ODBC设置了pyodbc,pyodbc的默认Unicode编码(UTF-16LE,顺便说一句)工作得很好。好的,谢谢,我将再次尝试。谢谢