У меня есть простая строка подключения для подключения к серверу MSSQL, работающему в локальном док-контейнере.Код прекрасно работает в Python 3.7 (не Conda), но не работает в любой среде Conda.Я особенно заинтересован в том, чтобы заставить его работать в ноутбуке Jupyter.
Я недавно переустановил Anaconda, но это, похоже, не связано, поскольку все еще не работает.Мой .bash_profile, кажется, немного беспорядок, но я не хотел вносить изменения, прежде чем я уверен, что я делаю.
Насколько я могу судить, моя conda-версия python не может найти драйверы pyodbc, которые использует другая версия python.
этот код работает для меня в любой неконда-версии Python, но не работает в других местах.
import pyodbc
drivers = [item for item in pyodbc.drivers()]
driver = drivers[-1]
print("driver:{}".format(driver))
server = '192.168.0.4'
database = 'XXXXXXX'
uid = 'sa'
pwd = 'XXXXXXXXXX'
con_string = f'DRIVER={driver};SERVER={server};PORT=1433;DATABASE={database};UID={uid};PWD={pwd}'
print(con_string)
cnxn = pyodbc.connect(con_string)
cursor = cnxn.cursor()
print('connected')
cursor.execute('SELECT * FROM TB_STYLE_AUDIT')
for row in cursor:
print(row)
ожидаемые результаты (сокращенно):
/usr/local/bin/python3.7 /Users/mycomputer/Documents/Pythonprojects/BuildingOldHistory/getHistoricaldata.py
driver:ODBC Driver 17 for SQL Server
DRIVER=ODBC Driver 17 for SQL Server;SERVER=192.168.0.4;PORT=1433;DATABASE=XXXXXXX;UID=sa;PWD=XXXXXXX
connected
(37962, 107, 555255, 662895, 689233, datetime.datetime(2016, 6, 8, 13, 22, 38), 1, '', '', '', -1.0, -10.0, -20.0, 'Sale', '1086504', '1088527', None, 18, None)
здесь есть ошибка от conda:
IndexError Traceback (most recent call last)
<ipython-input-1-ea3728340faa> in <module>
2
3 drivers = [item for item in pyodbc.drivers()]
----> 4 driver = drivers[-1]
5 print("driver:{}".format(driver))
6 server = '192.168.0.4'
IndexError: list index out of range
Редактирование, чтобы добавить, что этот код также работает внеconda:
import pyodbc
#drivers = [item for item in pyodbc.drivers()]
#driver = drivers[-1]
#print("driver:{}".format(driver))
driver = 'ODBC Driver 17 for SQL Server'
server = '192.168.0.4'
database = 'XXXXXXX'
uid = 'sa'
pwd = 'XXXXXXX'
con_string = f'DRIVER={driver};SERVER={server};PORT=1433;DATABASE={database};UID={uid};PWD={pwd}'
print(con_string)
cnxn = pyodbc.connect(con_string)
cursor = cnxn.cursor()
print('connected')
cursor.execute('SELECT * FROM TB_STYLE_AUDIT')
for row in cursor:
print(row)
, но выдает эту ошибку в записной книжке:
---------------------------------------------------------------------------
Error Traceback (most recent call last)
<ipython-input-2-3f7d96055440> in <module>
11 con_string = f'DRIVER={driver};SERVER={server};PORT=1433;DATABASE={database};UID={uid};PWD={pwd}'
12 print(con_string)
---> 13 cnxn = pyodbc.connect(con_string)
14
15
Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 17 for SQL Server' : file not found (0) (SQLDriverConnect)")