【发布时间】:2018-02-09 09:15:58
【问题描述】:
我在使用 PyODBC 查询我的 MSSQL 服务器时遇到问题。
我相信的原因是我有使用 unicode 命名的列。这些列来自我的主数据中的单个列。
有问题的列是“afkastningsgrad_primær_drift”
知道如何运行此查询吗? (由于我没有服务器所有权,因此无法在服务器上构建视图并重命名列)
SQL:
WITH dataTable AS (
SELECT
KredsEjdNr, Navn, Vaerdi
FROM qryEjendomsData
WHERE
RegnskabsAar = 2016
AND Projekt = 1710
AND Navn IN (
'ekm_ko' , 'afkastningsgrad_primær_drift', 'fremst_pris_maelk'
)
GROUP BY KredsEjdNr, Navn, Vaerdi
),
pivotData AS (
SELECT *
FROM dataTable
PIVOT
(
SUM(Vaerdi)
FOR[Navn] IN (
[ekm_ko], [afkastningsgrad_primær_drift], [fremst_pris_maelk]
)
)
AS pivotTable
)
SELECT
CAST([KredsEjdNr] AS NVARCHAR) AS [kredsEjdNr],
CAST(ekm_ko AS int) AS [EKM pr ko],
[afkastningsgrad_primær_drift] as [Afkastningsgrad],
[fremst_pris_maelk] AS [Fremstillingspris pr. kg EKM]
from pivotData
where [ekm_ko] IS NOT NULL and [fremst_pris_maelk] IS NOT NULL
order by kredsEjdNr
Python 代码:
#!/usr/local/bin/python
# -*- coding: utf-8 -*-
connectionstring = 'DRIVER={SQL Server Native Client 11.0};SERVER=server;DATABASE=database;UID=%s;PWD=%s' %(usr,pswd)
conn = pyodbc.connect(connectionstring)
cursor = conn.cursor()
dataList = cursor.execute(unicode(sql)).fetchall()
错误:
Traceback(最近一次调用最后一次):文件“data.py”,第 84 行,在 dataList = cursor.execute(unicode(sql)).fetchall() UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 183:序数不在范围内(128)
【问题讨论】:
-
嗯必须对我的查询进行 .decode('utf-8) 才能使其工作,有一段时间没有这样做了......
-
您使用的是哪个
pyodbc.version? -
我使用的是 4.0.16 版
标签: python sql-server unicode pyodbc