Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用pyodbc和python3查询具有特殊字符的字段时出现内存不足错误 环境 Python:3.4.2 pyodbc:4.0.23 操作系统:Debian9 DB:Sybase 12.5.3 驱动程序:unixODBC 2.3.1 问题_Python 3.x_Encoding_Out Of Memory_Sybase_Pyodbc - Fatal编程技术网

Python 3.x 使用pyodbc和python3查询具有特殊字符的字段时出现内存不足错误 环境 Python:3.4.2 pyodbc:4.0.23 操作系统:Debian9 DB:Sybase 12.5.3 驱动程序:unixODBC 2.3.1 问题

Python 3.x 使用pyodbc和python3查询具有特殊字符的字段时出现内存不足错误 环境 Python:3.4.2 pyodbc:4.0.23 操作系统:Debian9 DB:Sybase 12.5.3 驱动程序:unixODBC 2.3.1 问题,python-3.x,encoding,out-of-memory,sybase,pyodbc,Python 3.x,Encoding,Out Of Memory,Sybase,Pyodbc,我正在使用Django和SQLAlchemy将一个web应用程序从Python2移植到Python3,除了对任何表执行“选择*”的查询之外,其他一切都正常工作。我使用以下代码对其进行了测试: connector = "DRIVER={%s};Server=%s;Database=%s;UID=%s;PWD=%s;TDS_Version=%s;Port=%s;" % my_db conn = db.connect(connector) cur = conn.cursor() query = 'SE

我正在使用Django和SQLAlchemy将一个web应用程序从Python2移植到Python3,除了对任何表执行“选择*”的查询之外,其他一切都正常工作。我使用以下代码对其进行了测试:

connector = "DRIVER={%s};Server=%s;Database=%s;UID=%s;PWD=%s;TDS_Version=%s;Port=%s;" % my_db
conn = db.connect(connector)
cur = conn.cursor()
query = 'SELECT * FROM My_Table'
cur.execute(query)
row = cur.fetchall()
预期行为,表中每一行的元组列表,以及所有可用列。然而,与此相反,我从python获得了一个“DEAD”标志,在syslog中有以下行:

Jul 25 09:26:27 my_machine kernel: [8628886.255305] Out of memory: Kill process 25238 (python) score 909 or sacrifice child.
同样的代码在Python2中工作得很好。我决定尝试查询更少的字段。只要求两个字段(ID、昵称),代码在Python3中运行良好,因此进行了更多的尝试,发现当我的查询返回一个包含特殊字符的字段(如ç、ã等)时,会出现以下错误:

"pyodbc.ProgrammingError: ('42000', "[42000] [FreeTDS][SQL Server]Some character(s) could not be converted into client's character set.  Unconverted bytes were changed to question marks ('?') (2403) (SQLGetData)")"

说到蟒蛇3,我忘了什么吗?如何使代码再次工作?

要使用Python3,我必须执行以下操作:

import pyodbc as db # forgot the imports
conn.setdecoding(db.SQL_CHAR, encoding='latin1')
conn.setencoding('latin1')

当我通知编码组时,我的代码与Python3一起工作。出于某种原因,Python2不需要它,无论如何,我在写这个问题时发现了这一点,并决定分享解决方案。

要使用Python3,我必须这样做:

import pyodbc as db # forgot the imports
conn.setdecoding(db.SQL_CHAR, encoding='latin1')
conn.setencoding('latin1')
当我通知编码组时,我的代码与Python3一起工作。出于某种原因,Python2不需要它,无论如何,我在写这个问题时发现了这一点,并决定分享解决方案