gpt4 book ai didi

python - 旧的 UnicodeEncodeError 打印结果来自使用 adodbapi 的 MS SQL 查询

转载 作者:行者123 更新时间:2023-11-28 18:52:45 24 4
gpt4 key购买 nike

这里是 Python 新手。

我在 Windows7 上使用 python2.7.2。

我已经安装了 PyWin32 扩展(build 217)。

我在 c:\Python27\Lib\site-packages\adodbapi 中安装了 adopdbapi

我有一个非常简单的模块,用于查询 MS SQL Server 中的 AdventureWorks2008LT 数据库。

import adodbapi

connStr='Provider=SQLOLEDB.1;' \
'Integrated Security=SSPI;' \
'Persist Security Info=False;' \
'Initial Catalog=AVWKS2008LT;' \
'Data Source=.\\SQLEXPRESS'

conn = adodbapi.connect(connStr)

tablename = "[salesLT].[Customer]"

# create a cursor
cur = conn.cursor()

# extract all the data
sql = "select * from %s" % tablename
cur.execute(sql)

# show the result
result = cur.fetchall()
for item in result:
print item

# close the cursor and connection
cur.close()
conn.close()

AdventureWorks2008LT 示例数据库包含客户、产品、地址和订单表(等)。这些表中的一些字符串数据是 unicode。

查询有效,前几行。我看到了预期的输出。但是随后,脚本失败并显示以下消息:

Traceback (most recent call last):
File "C:\dev\python\query-1.py", line 24, in <module>
print item
File "C:\Python27\lib\site-packages\adodbapi\adodbapi.py", line 651, in __str__
return str(tuple([str(self._getValue(i)) for i in range(len(self.rows.converters))]))
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 19: ordinal not in range(128)

...这非常没有帮助。大部头书。

我了解到 adodbapi 正在尝试将 u'\xe9' 字符编码为 ASCII。我明白为什么会失败。我想它正试图作为 print 的一部分这样做声明。

为什么要尝试将字符编码为 ASCII?
我怎样才能告诉它只使用 UTF-8?

ps:我在 Windows 的 cmd.exe 提示符下运行脚本。这是否意味着标准输出始终是 ASCII?

例如,\python27\python.exe -c "import sys; print(sys.stdout.encoding)"

给我'cp437'

最佳答案

我能够让脚本运行完成,打印所有检索到的行,通过修改输出部分来执行此操作:

# show the result
result = cur.fetchall()
for item in result:
print repr(item)

而不是这个:

# show the result
result = cur.fetchall()
for item in result:
print item

因此,正如 Borealid 在评论中所说,问题实际上是在 adodbapi 中使用 str。但这不一定是阻塞问题。通常,当从数据库查询中检索行时,人们不仅仅需要行的字符串表示;他们想要检索各个列中的值。我的结论是,由于我构建测试应用程序的方式,这个问题是一种人为问题。

关于python - 旧的 UnicodeEncodeError 打印结果来自使用 adodbapi 的 MS SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9747090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com