Подключение к серверу Microsoft SQL с использованием Python
Я пытаюсь подключиться к SQL через python для запуска некоторых запросов в некоторых SQL-базах данных на сервере Microsoft SQL. Из моих исследований в Интернете и на этом форуме наиболее перспективной библиотекой, по-видимому, является pyobbc. Поэтому я сделал следующий код
import pyodbc
conn = pyodbc.connect(init_string="driver={SQLOLEDB}; server=+ServerName+;
database=+MSQLDatabase+; trusted_connection=true")
cursor = conn.cursor()
и получите следующую ошибку
Traceback (most recent call last):
File "C:\Users...\scrap.py", line 3, in <module>
conn = pyodbc.connect(init_string="driver={SQLOLEDB}; server=+ServerName+; database=+MSQLDatabase+; trusted_connection=true")
pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)')
Я просмотрел следующие сообщения и попытался сменить мой драйвер на {sql server} и подключиться к ODBC-ссылкам ранее в SAS, что частично связано с моим вышеописанным кодом, поэтому не думаю, что мне нужно установить ничего другого.
pyodbc.Error: ('IM002', '[IM002] [unixODBC] [Диспетчер драйверов] Имя источника данных не найдено, и указанный драйвер по умолчанию не указан (0) (SQLDriverConnect) ")
Pyodbc - "Имя источника данных не найдено, а драйвер по умолчанию не указан"
Спасибо
Ответы
Ответ 1
Вот как я это делаю...
import pyodbc
cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};"
"Server=server_name;"
"Database=db_name;"
"Trusted_Connection=yes;")
cursor = cnxn.cursor()
cursor.execute('SELECT * FROM Table')
for row in cursor:
print('row = %r' % (row,))
Соответствующие ресурсы:
Ответ 2
Незначительное дополнение к тому, что было сказано ранее. Вероятно, вы захотите вернуть данные. Это будет сделано как
import pypyodbc
import pandas as pd
cnxn = pypyodbc.connect("Driver={SQL Server Native Client 11.0};"
"Server=server_name;"
"Database=db_name;"
"uid=User;pwd=password")
df = pd.read_sql_query('select * from table', cnxn)
Ответ 3
В соединениях источника данных между клиентом и сервером существуют два общих типа: ODBC, который использует DRIVER и OLEDB, который использует PROVIDER. И в мире программирования это регулярная дискуссия относительно того, какой маршрут можно подключить к источникам данных.
Вы используете поставщика SQLOLEDB
, но указав его как драйвер. Насколько я знаю, ни модули pyobbc, ни pypyodbc не поддерживают соединения Window OLEDB. Тем не менее, adodbapi, который использует Microsoft ADO в качестве базового компонента.
Ниже приведены оба подхода к вашим параметрам соединения. Кроме того, я string format ваши переменные, так как ваша конкатенация неправильно сломала кавычки в строке. Вы заметите, что я удваиваю фигурные скобки, так как это необходимо в строке соединения, и string.format()
также использует его.
# PROVIDER
import adodbapi
conn = adodbapi.connect("PROVIDER=SQLOLEDB;Data Source={0};Database={1}; \
trusted_connection=yes;UID={2};PWD={3};".format(ServerName,MSQLDatabase,username,password))
cursor = conn.cursor()
# DRIVER
import pyodbc
conn = pyodbc.connect("DRIVER={{SQL Server}};SERVER={0}; database={1}; \
trusted_connection=yes;UID={2};PWD={3}".format(ServerName,MSQLDatabase,username,password))
cursor = conn.cursor()
Ответ 4
Предпочитаю так... было намного проще
http://www.pymssql.org/en/stable/pymssql_examples.html
conn = pymssql.connect("192.168.10.198", "odoo", "secret", "EFACTURA")
cursor = conn.cursor()
cursor.execute('SELECT * FROM usuario')
Ответ 5
Вот несколько фотографий для новичков.
![enter image description here]()
Ответ 6
Попробуйте использовать pytds, он работает в более сложной среде, чем pyodbc
и проще в настройке.
Я сделал это работает на Ubuntu 18.04
Ссылка: https://github.com/denisenkom/pytds
Пример кода в документации:
import pytds
with pytds.connect('server', 'database', 'user', 'password') as conn:
with conn.cursor() as cur:
cur.execute("select 1")
cur.fetchall()
Ответ 7
Следующий код Python работал для меня. Чтобы проверить соединение ODBC, я сначала создал 4-строчное консольное приложение С#, как указано ниже.
Код Python
import pandas as pd
import pyodbc
cnxn = pyodbc.connect("Driver={SQL Server};Server=serverName;UID=UserName;PWD=Password;Database=RCO_DW;")
df = pd.read_sql_query('select TOP 10 * from dbo.Table WHERE Patient_Key > 1000', cnxn)
df.head()
Вызов хранимой процедуры
dfProcResult = pd.read_sql_query('exec dbo.usp_GetPatientProfile ?', cnxn, params=['MyParam'] )
Программа на С# для проверки соединения ODBC
static void Main(string[] args)
{
string connectionString = "Driver={SQL Server};Server=serverName;UID=UserName;PWD=Password;Database=RCO_DW;";
OdbcConnection cn = new OdbcConnection(connectionString);
cn.Open();
cn.Close();
}
Ответ 8
Альтернативный подход: установка драйвера Microsoft ODBC 13, затем замените SQLOLEDB
на ODBC Driver 13 for SQL Server
С уважением.
Ответ 9
Если бы вы могли обновить свой sql-сервер, вы можете запустить свой код python на sql-сервере напрямую, используя Python in-databse.
Вы можете прочитать больше о том, как запустить python или r в базе данных в этой статье.