2017-02-16 4 views
1

Я пытаюсь получить данные SQL на Linux Server (Ubuntu 16.04.2) в сценарии Python 3.5 с использованием драйвера ODBC 13 для SQL Server. Запуск сценария на SQL Server и Python в Windows идет хорошо. Запуск сценария в Python в Linux вызывает ошибку синтаксиса SQL Server:Подключение python3 к Ubuntu к SQL Server 2014

pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft] [драйвер ODBC 13 для SQL Server] [SQL Server] Неверный синтаксис рядом с ' 0x107c '. (102) (SQLExecDirectW) ")

Поскольку я добавляю или удаляю столбцы, он меняет« 0x107c »на другой символ, предполагающий, что это не один незаконный символ, а несколько. С более ограниченным количеством столбцов сценарий даже запускается (исключается [Тип заказа] и [Заказ 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

решение для использования в будущем. Не используйте pyodbc для Linux для подключения к 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 для python. Однако Microsoft ставит свои усилия по тестированию и уверенность в драйвере pyodbc». https://docs.microsoft.com/en-us/sql/connect/python/python-driver-for-sql-server – alys

+0

Привет, Shoof, я не уверен в этом. На машинах Windows я всегда использую pyobbc. Однако для этого pymssql работает лучше. Не спрашивайте меня, почему :) –

Смежные вопросы