Я пытаюсь подключиться к серверу MS SQL, поэтому я создал системный DSN на сервере с драйвером 'SQL Server Native Client 11.0'. Имя DSN:
mydsn1
Я могу подключиться только с использованием SQL IP-адреса сервера и с использованием SQL Аутентификация сервера (используя идентификатор входа и пароль ). Для этого я использовал ODB C Администратор источника данных GUI и даже успешно завершил «Тестирование источника данных».
Теперь я пытаюсь проверить соединение с SQL сервер в python с использованием SQL Алхимия.
- Это первый использованный мной синтаксис, который работает:
import pyodbc
import sqlalchemy as sa
import urllib
driver='SQL Server Native Client 11.0'
server = '12.34.567.890'
database = 'MYDATABASE'
userid = 'Cool-USER'
password = 'P@ssword1!'
stringparams = "DRIVER={{{0}}};SERVER={1};DATABASE={2};UID={3};PWD={4}".format(driver, server, database, userid, password)
params = urllib.parse.quote_plus(stringparams)
myengine = sa.create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)
cursor = myengine.raw_connection().cursor()
cursor.execute('SELECT top 3 * FROM SOME_TABLE')
for row in cursor:
print(row)
cursor.commit()
cursor.close()
Теперь это второй синтаксис, который я пробовал, который также работает:
mystr = "mssql+pyodbc://{0}:{1}@{2}/{3}?driver={4}".format(userid, password, server, database, driver)
myengine = sa.create_engine(mystr)
cursor = myengine.raw_connection().cursor()
cursor.execute('SELECT top 3 * FROM SOME_TABLE')
for row in cursor:
print(row)
cursor.commit()
cursor.close()
Чего я действительно хотел бы добиться, так это использовать фактический DSN, который я создал! Есть ли синтаксис с функцией create_engine()
из sqlalchemy, которая использует DSN? Насколько я понимаю, так как я создал DSN (предоставив логин и пароль в SQL Authentication), мне не нужно будет снова вводить эти учетные данные при вызове функции sa.create_engine (). Однако, к сожалению, я продолжаю получать ошибки.
Это то, что я пробовал, и это НЕ работает:
driver='SQL Server Native Client 11.0'
server = '12.34.567.890'
database = 'MYDATABASE'
userid = 'Cool-USER'
password = 'P@ssword1!'
dsn = 'mydsn1'
stringparams = "DRIVER={{{0}}};SERVER={1};DATABASE={2};DSN={3}".format(driver, server, database, dsn)
params = urllib.parse.quote_plus(stringparams)
myengine = sa.create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)
cursor = myengine.raw_connection().cursor()
В строке появляется следующая ошибка cursor = myengine.raw_connection().cursor()
InterfaceError: (pyodbc.InterfaceError) ('28000', "[28000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user ''. (18456) (SQLDriverConnect); [28000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user ''. (18456)")
(Background on this error at: http://sqlalche.me/e/rvf5)
- По многим причинам мне действительно нужно использовать SQL Alchemy (а не просто pyodb c .connect ()), и я действительно надеялся, что есть способ использовать DSN без необходимости вводить пароли.
Любая помощь в этом очень ценится!