2017-02-16 19 views
1

SQL ServerのODBCドライバ13を使用して、Python 3.5スクリプトでLinuxサーバ(Ubuntu 16.04.2)でSQLデータを取得しようとしています。 WindowsでSQL ServerとPythonでスクリプトを実行するとうまくいく。 LinuxでPythonでスクリプトを実行すると、SQL Server構文エラーが発生するPython3をUbuntu上でSQL Server 2014に接続する

pyodbc.ProgrammingError:( '42000'、[42000] [Microsoft] [SQL Server用のODBCドライバ13] [SQL Server] "0x107c '。)(102)(SQLExecDirectW)")

列を追加または削除すると、' 0x107c 'が異なる文字に変更され、1つの違法な文字ではなく複数の文字になります。文字列の量が限られているので、スクリプトは実行されます([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

私は同じウェブサイトの反対の勧告を参照してください。 「PythonのSQLドライバはいくつか用意されていますが、マイクロソフトはpyodbcドライバにテストの努力と信頼を置いています。 https://docs.microsoft.com/en-us/sql/connect/python/python-driver-for-sql-server – alys

+0

こんにちは、私はそれについてはよく分かりません。 Windowsマシンでは、私はいつもpyodbcを使います。しかし、この目的のためにpymssqlがうまく機能します。なぜ私に尋ねないでください:) –

関連する問題