2017-02-16 3 views
1

SQL Server 용 ODBC 드라이버 13을 사용하여 Python 3.5 스크립트로 Linux 서버 (Ubuntu 16.04.2)에서 SQL 데이터를 검색하려고합니다. Windows에서 SQL Server 및 Python으로 스크립트를 실행하면 문제가 없습니다. 리눅스에서 파이썬으로 스크립트를 실행하면 SQL Server 구문 오류가 발생합니다.Python3을 Ubuntu에서 SQL Server 2014에 연결

pyodbc.ProgrammingError : ('42000', [42000] [Microsoft] [SQL Server 용 ODBC 드라이버 13] [SQL Server] 0x107c '. (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] 

답변

2

솔루션. Linux에서 pyodbc를 사용하여 MS SQL Server에 연결하지 마십시오. 대신 pymssql을 사용하십시오. 안내는 여기에서 : https://docs.microsoft.com/en-us/sql/connect/python/pymssql/step-1-configure-development-environment-for-pymssql-python-development.

+0

동일한 웹 사이트의 반대 권고 사항을 참조하십시오. "여러 가지 파이썬 SQL 드라이버가 있지만, Microsoft는 테스트 노력과 pyodbc 드라이버에 대한 자신감을 갖고 있습니다." https://docs.microsoft.com/en-us/sql/connect/python/python-driver-for-sql-server – alys

+0

안녕하세요, Shoof, 그것에 대해 잘 모르겠습니다. Windows 컴퓨터에서 나는 항상 pyodbc를 사용합니다. 그러나,이 목적을 위해 pymssql이 더 잘 작동합니다. 왜 나 한테 묻지 마. :) –