将Ubuntu上的python3连接到SQL Server 2014

将Ubuntu上的python3连接到SQL Server 2014,python,sql-server,python-3.x,ubuntu,pyodbc,Python,Sql Server,Python 3.x,Ubuntu,Pyodbc,我正在尝试在Linux服务器(Ubuntu 16.04.2)上使用SQL Server的ODBC驱动程序13在Python 3.5脚本中检索SQL数据。在windows中的SQL Server和Python上运行该脚本很好。在Linux中以Python运行脚本会引发SQL Server语法错误: pyodbc.ProgrammingError:('42000',“[42000][Microsoft][SQL Server的ODBC驱动程序13][SQL Server]靠近'0x107c'的语法不

我正在尝试在Linux服务器(Ubuntu 16.04.2)上使用SQL Server的ODBC驱动程序13在Python 3.5脚本中检索SQL数据。在windows中的SQL Server和Python上运行该脚本很好。在Linux中以Python运行脚本会引发SQL Server语法错误:

pyodbc.ProgrammingError:('42000',“[42000][Microsoft][SQL Server的ODBC驱动程序13][SQL Server]靠近'0x107c'的语法不正确”。(102)(SQLExecDirectW)”

当我添加或删除列时,它会将“0x107c”更改为不同的字符,这表明它不是单个非法字符,而是多个非法字符。脚本运行的列数更为有限(不包括[Order Type text]和[Order Nr])。这让我怀疑字符集转换中出现了问题。我做错了什么?我如何修复它

蟒蛇3.5:

import pandas as pd
import pyodbc

#Set parameters
sql_file = 'file.sql'

#Define methods
def SQLDataToDataframe(filename):
    fd = open('file.sql','r')
    content = fd.read()
    fd.close()
df = pd.read_sql(content, connection)
return df

#Import Data from SQL
connection = pyodbc.connect('Driver={ODBC Driver 13 for SQL Server};'
                            'Server=Server;'
                            'Database=DB;'
                            'uid=User;pwd=Password')

 dataframe = SQLDataToDataframe(sql_file)
file.sql:

SELECT [ID]
  ,[Company Code]
  ,[Description]
  ,[Order Category]
  ,[Order Category Text]
  ,[Order Type]
  ,[Order Type text]
  ,[Order Nr]
FROM [TABLE]

解决方案供将来参考。不要在Linux上使用pyodbc连接到MS SQL Server。改用pymssql。此处的说明:

我在同一个网站上看到了相反的建议。“有几种python SQL驱动程序可用。但是,微软将其测试工作和信心放在pyodbc驱动程序上。”嗨,肖夫,我对此不确定。在Windows机器上,我总是使用pyodbc。然而,出于这个目的,pymssql工作得更好。别问我为什么:)