我试图在使用SQL Server的ODBC驱动程序13的Python 3.5脚本中的Linux服务器(Ubuntu 16.04.2)上检索SQL数据。在Windows上运行SQL Server和Python脚本并没有问题。在Linux中运行Python脚本会引发SQL Server语法错误:将Ubuntu上的python3连接到SQL Server 2014
pyodbc.ProgrammingError:('42000',“[42000] [Microsoft] [ODBC驱动程序13 for SQL Server] [SQL Server]错误的语法靠近' (102)(SQLExecDirectW)“)
当我添加或删除列时,它将'0x107c'更改为不同的字符,暗示它不是一个非法字符,而是几个。在脚本数量有限的情况下,脚本甚至会运行(排除[Order Type text]和[Order Nr])。这导致我怀疑字符集转换中出现了问题。我做错了什么,如何解决?
Python3.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]
我从同一个网站看到相反的建议。 “有几个python SQL驱动程序可用,但是,微软将测试工作和对pyodbc驱动程序的信心放在了一起。” https://docs.microsoft.com/en-us/sql/connect/python/python-driver-for-sql-server – alys
嗨Shoof,我不确定这一点。在Windows机器上,我总是使用pyodbc。但是,为此,pymssql更好。不要问我为什么:) –