Подключение к серверу Microsoft SQL с помощью Python -- python поле с участием sql поле с участием windows пол Связанный проблема

Connecting to Microsoft SQL server using Python


98
vote

проблема

русский
<Р> Я пытаюсь подключиться к SQL через питон для запуска некоторых запросов на некоторых базах данных SQL на сервере Microsoft SQL. Из моих исследований в Интернете и на этом форуме, наиболее перспективная библиотека, кажется pyodbc. Так что я сделал следующий код
 <код> 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] [Driver Manager] источник данных не найден, и драйвер по умолчанию не указано (0) (SQLDriverConnect) ') <Р> Pyodbc - «Имя источника данных не найдено, и драйвер по умолчанию не указано "

Спасибо

Английский оригинал

I am trying to connect to SQL through python to run some queries on some SQL databases on Microsoft SQL server. From my research online and on this forum the most promising library seems to be pyodbc. So I have made the following code

import pyodbc conn = pyodbc.connect(init_string="driver={SQLOLEDB}; server=+ServerName+;  database=+MSQLDatabase+; trusted_connection=true") cursor = conn.cursor() 

and get the following error

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)') 

I have looked at the folowing posts and tried changing my driver to {sql server} and have connected using ODBC links before in SAS, which is partially what my above code is based on, so don't think I need to install anything else.

pyodbc.Error: ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)')

Pyodbc - "Data source name not found, and no default driver specified"

Thanks

</div
        
   
   

Список ответов

149
 
vote
vote
Лучший ответ
 

Вот как я это делаю ...

 <код> if (str == team_array[i]) 1  

Соответствующие ресурсы:

    .
  • https://github.com / Mkleehammer / Pyodbc / Wiki / Подключение к SQL-серверу из Windows

  • http://blogs.msdn.com/b/cdndevs/archive/2015/03/11/python-and-data-sql-server-as -data-source-for-python-application.aspx

 

This is how I do it...

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,)) 

Relevant resources:

  • https://github.com/mkleehammer/pyodbc/wiki/Connecting-to-SQL-Server-from-Windows

  • http://blogs.msdn.com/b/cdndevs/archive/2015/03/11/python-and-data-sql-server-as-a-data-source-for-python-applications.aspx

</div
 
 
64
 
vote

Незначительное дополнение к тому, что было сказано раньше. Вы, вероятно, хотите вернуть Dataframe. Это будет сделано как

 <код> if (str == team_array[i]) 2  
 

Minor addition to what has been said before. You likely want to return a dataframe. This would be done as

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) 
</div
 
 
39
 
vote

В исходных соединениях данных между клиентом и сервером Есть два общих типа: ODBC, который использует драйвер и OLEDB, который использует провайдер. И в мире программирования это a регулярно Дебаты в отношении которого путь к подключению к источникам данных.

Вы используете провайдер, <код> SQLOLEDB , но указав его в качестве драйвера. Насколько я знаю, ни PyoDBC, ни Pypyodbc модули поддерживают окно OLEDB Connections. Тем не менее, adodbapi делает, который использует Microsoft Ado в качестве основного компонента.

Ниже приведены оба подхода к параметрам вашего соединения. Кроме того, I Формат строки Ваши переменные в качестве ваша конкатенация не нарушили котировки в строке Отказ Вы заметите, что удваиваете курчавые брекеты, поскольку это необходимо в строке подключения и 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()   
 

In data source connections between a client and server there are two general types: ODBC which uses a DRIVER and OLEDB which uses a PROVIDER. And in the programming world, it is a regular debate as to which route to go in connecting to data sources.

You are using a provider, SQLOLEDB, but specifying it as a driver. As far as I know, neither the pyodbc nor pypyodbc modules support Window OLEDB connections. However, the adodbapi does which uses the Microsoft ADO as an underlying component.

Below are both approaches for your connection parameters. Also, I string format your variables as your concatenation did not properly break quotes within string. You'll notice I double the curly braces since it is needed in connection string and string.format() also uses it.

# 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() 
</div
 
 
     
     
15
 
vote

Я предпочитаю так ... это было намного проще

http://www.pymssql.org/en/stable/pymssql_examples.html < / a>

 <код> conn = pymssql.connect("192.168.10.198", "odoo", "secret", "EFACTURA") cursor = conn.cursor() cursor.execute('SELECT * FROM usuario')   
 

I Prefer this way ... it was much easier

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') 
</div
 
 
   
   
4
 
vote

Попробуйте использовать Pytds, он работает на протяжении все более сложности окружающей среды, чем <Код> pyodbc и более простым для настройки.

Я сделал это работать на Ubuntu 18.04

ref: 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()   
 

Try using pytds, it works throughout more complexity environment than pyodbc and more easier to setup.

I made it work on Ubuntu 18.04

Ref: https://github.com/denisenkom/pytds

Example code in documentation:

import pytds with pytds.connect('server', 'database', 'user', 'password') as conn:     with conn.cursor() as cur:         cur.execute("select 1")         cur.fetchall() 
</div
 
 
 
 
4
 
vote

Следующий следующий код Python работал для меня. Чтобы проверить соединение ODBC, я впервые создал 4 консоли C # C # Console, как указано ниже.

<сильный> 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'] )   

C # C # Программа для проверки соединения 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();     }   
 

Following Python code worked for me. To check the ODBC connection, I first created a 4 line C# console application as listed below.

Python Code

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() 

Calling a Stored Procedure

 dfProcResult = pd.read_sql_query('exec dbo.usp_GetPatientProfile ?', cnxn, params=['MyParam'] ) 

C# Program to Check ODBC Connection

    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();     } 
</div
 
 
1
 
vote

Я пытался подключить SQL Server следующим образом, и те, кто работал для меня.

Для подключения используя аутентификацию Windows

 <код> import pyodbc  conn = pyodbc.connect('Driver={SQL Server};Server='+servername+';Trusted_Connection=yes;Database='+databasename+';') cursor = conn.cursor() cursor.execute("Select 1 as Data")   

Чтобы использовать аутентификацию SQL Server I использовал следующий код.

 <код> string.format()0  
 

I tried to connect sql server in following ways and those worked for me.

To connect using windows authentication

import pyodbc  conn = pyodbc.connect('Driver={SQL Server};Server='+servername+';Trusted_Connection=yes;Database='+databasename+';') cursor = conn.cursor() cursor.execute("Select 1 as Data") 

To use sql server authentication I used following code.

import pyodbc  conn = pyodbc.connect('Driver={SQL Server};Server='+servername+  ';UID='+userid+';PWD='+password+';Database='+databasename)  cursor1 = conn.cursor() cursor1.execute("SELECT 1 AS DATA") 
</div
 
 
1
 
vote

попробуйте <код> string.format()1 : <код> string.format()2

 <Код> string.format()3  

Выход:

 <Код> string.format()4  

Соединение также можно проверить с терминала, с одной линейкой кода с <код> string.format()5 . Смотрите Синтаксис ,

 <Код> string.format()6  
 <Код> string.format()7  

Выход:

 <Код> string.format()8  
 

Try with pymssql: pip install pymssql

import pymssql  try:     conn = pymssql.connect(server="host_or_ip", user="your_username", password="your_password", database="your_db")     cursor = conn.cursor()     cursor.execute ("SELECT @@VERSION")     row = cursor.fetchone()     print(f"  SERVER VERSION:  {row[0]}")     cursor.close()     conn.close() except Exception:     print(" ERROR: Unable to connect to the server.")     exit(-1) 

Output:

SERVER VERSION:  Microsoft SQL Server 2016 (SP2-CU14) (KB4564903) - 13.0.5830.85 (X64)         Jul 31 2020 18:47:07         Copyright (c) Microsoft Corporation         Standard Edition (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600: ) (Hypervisor)  

The connection can also be checked from the terminal, with a single line of code with sqlcmd. See syntax.

╔═════════╦═════════════════════════════════════════╗ ║ Command ║               Description               ║ ╠═════════╬═════════════════════════════════════════╣ ║   -S    ║ [protocol:]server[instance_name][,port] ║ ║   -U    ║ login_id                                ║ ║   -p    ║ password                                ║ ║   -Q    ║ "cmdline query" (and exit)              ║ ╚═════════╩═════════════════════════════════════════╝ 
sqlcmd -S "host_or_ip"  -U "your_username" -p -Q "SELECT @@VERSION" 

output:

Password:    your_password    -------------------------------------------------------------------------------------------------------------------------------------------------------- Microsoft SQL Server 2016 (SP2-CU14) (KB4564903) - 13.0.5830.85 (X64)          Jul 31 2020 18:47:07          Copyright (c) Microsoft Corporation         Standard Edition (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600: ) (Hypervisor)   (1 rows affected)  Network packet size (bytes): 4096 1 xact[s]: Clock Time (ms.): total         1  avg   1.00 (1000.00 xacts per sec.) 
</div
 
 
0
 
vote
<Р> Альтернативный подход будет установка Microsoft ODBC Driver 13, а затем замените <код> SQLOLEDB с <код> ODBC Driver 13 for SQL Server

С уважением.

 

An alternative approach would be installing Microsoft ODBC Driver 13, then replace SQLOLEDB with ODBC Driver 13 for SQL Server

Regards.

</div
 
 
0
 
vote
<Р> вот один, который работает для меня:
 <код> from sqlalchemy import create_engine import urllib  conn_str = ( r'Driver=ODBC Driver 13 for SQL Server;' r'Server=DefinitelyNotProd;' r'Database=PlayPen;' r'Trusted_Connection=Yes;')  quoted_conn_str = urllib.parse.quote_plus(conn_str) engine = create_engine('mssql+pyodbc:///?odbc_connect={}'.format(quoted_conn_str))   
 

here's the one that works for me:

from sqlalchemy import create_engine import urllib  conn_str = ( r'Driver=ODBC Driver 13 for SQL Server;' r'Server=DefinitelyNotProd;' r'Database=PlayPen;' r'Trusted_Connection=Yes;')  quoted_conn_str = urllib.parse.quote_plus(conn_str) engine = create_engine('mssql+pyodbc:///?odbc_connect={}'.format(quoted_conn_str)) 
</div
 
 
0
 
vote
<Р> Я нашел уточненные ресурсы здесь: Microsoft | SQL Docs | Python SQL Driver <Р> Есть эти два варианта объяснили, включая все необходимые предпосылки и примеры кода: драйвер Python SQL - pyodbc (испытано & амп; работает) драйвер Python SQL - pymssql
 

I found up-to-date resources here: Microsoft | SQL Docs | Python SQL Driver

There are these two options explained including all the prerequisites needed and code examples: Python SQL driver - pyodbc (tested & working) Python SQL driver - pymssql

</div
 
 
 
 
0
 
vote
<Р> Моя версия. Надеюсь, это поможет.
 <код>  import pandas.io.sql import pyodbc import sys  server = 'example' db = 'NORTHWND' db2 = 'example'  #Crear la conexión conn = pyodbc.connect('DRIVER={SQL Server};SERVER=' + server +                       ';DATABASE=' + db +                       ';DATABASE=' + db2 +                       ';Trusted_Connection=yes') #Query db sql = """SELECT [EmployeeID]       ,[LastName]       ,[FirstName]       ,[Title]       ,[TitleOfCourtesy]       ,[BirthDate]       ,[HireDate]       ,[Address]       ,[City]       ,[Region]       ,[PostalCode]       ,[Country]       ,[HomePhone]       ,[Extension]       ,[Photo]       ,[Notes]       ,[ReportsTo]       ,[PhotoPath]   FROM [NORTHWND].[dbo].[Employees] """ data_frame = pd.read_sql(sql, conn) data_frame    
 

My version. Hope it helps.

 import pandas.io.sql import pyodbc import sys  server = 'example' db = 'NORTHWND' db2 = 'example'  #Crear la conexión conn = pyodbc.connect('DRIVER={SQL Server};SERVER=' + server +                       ';DATABASE=' + db +                       ';DATABASE=' + db2 +                       ';Trusted_Connection=yes') #Query db sql = """SELECT [EmployeeID]       ,[LastName]       ,[FirstName]       ,[Title]       ,[TitleOfCourtesy]       ,[BirthDate]       ,[HireDate]       ,[Address]       ,[City]       ,[Region]       ,[PostalCode]       ,[Country]       ,[HomePhone]       ,[Extension]       ,[Photo]       ,[Notes]       ,[ReportsTo]       ,[PhotoPath]   FROM [NORTHWND].[dbo].[Employees] """ data_frame = pd.read_sql(sql, conn) data_frame  
</div
 
 

Связанный проблема

0  Почему этот сценарий Python работает на Ubuntu, но не распачин?  ( Why does this python script work on ubuntu but not raspbian ) 
Друг, и я создал следующий скрипт, использующий BeautifulSoup, чтобы получить HTML страницы работы, а затем добавить работу на массив, затем файл, затем отпра...

0  Использование Selenium Python при взаимодействии с веб-сайтом вручную  ( Using selenium python while interacting with a website manually ) 
Обновление: Я создал пользовательский профиль с совместимым способом IE в качестве по умолчанию и получить ту же сообщение об ошибке, поэтому кажется что-то о...

0  Запустите сценарий Python в колбу  ( Run python script into flask ) 
У меня есть настольное приложение для обнаружения лиц, написанных в сценарии Python, используя OpenCV и Numpy. Я хочу поставить эти файлы Python в колбу и зап...

6  ReportLab 'LayoutError' Обработка и отладки  ( Reportlab layouterror handling and debugging ) 
Я работал с некоторыми сложными выходами PDF с ReportLab. Это, как правило, хорошо, но есть некоторые случаи, где я получаю LayoutErrors - это обычно потому, ...

2  Высокое использование ЦП в ткани 1.0.0  ( High cpu usage in fabric 1 0 0 ) 
в ткани 0,9, все работает нормально, но в 1.0.0, следующий скрипт ткани показывает 100% загрузку CPU в <Код> top : <код> from fabric.api import run def tes...

1  Выполнить файл SQL, возвращать результаты как Pandas DataFrame  ( Execute sql file return results as pandas dataframe ) 
У меня есть сложный запрос SQL Server, который я хотел бы выполнить из Python и вернуть результаты в виде файла PandaFrame. Моя база данных читается только ...

0  Вызов частных методов для метода класса: Python  ( Calling private methods for class method python ) 
Я пытаюсь реализовать несколько конструкторов в Python, а одно из предложений (через онлайн-поиск) должен был использовать ClassMethod. Однако, используя это,...

5  Сайт к изображению  ( Website to image ) 
Я запускаю Python 3.1, и вы бы назвали меня продвинутым начинающим :) Мой вопрос простой: я пытаюсь сделать простую программу, которая просит пользователям ...

1  Почему libleosa liblesa.feature.mfcc () выпрыгивает 2D массив?  ( Why does librosa librosa feature mfcc spit out a 2d array ) 
Вызов libleosa.feature.mfcc () в аудиофайле выплесет 2D-массив, как так: <код> array([[ -5.229e+02, -4.944e+02, ..., -5.229e+02, -5.229e+02], [ 7.105...

-2  Обменная переменная или бесплатная переменная?  ( Is num a bound variable or a free variable ) 
<код> def function() num = 1 num += 1 return num Обменивается связанная переменная или бесплатная переменная? P.S. Этот код написан в Python...

2  Скапировка не вызывает никакой другой функции после «__init__»  ( Scrapy not calling any other function after init ) 
ОС: Ubuntu 16.04 Стек - Scrapy 1.0.3 + Selenium Я довольно новичок в Scrape, и это может звучать очень простое, но в моем пауке только « init » выполняется. Л...

9  От CVX до CVXPY или CVXOPT  ( From cvx to cvxpy or cvxopt ) 
Я пытался пройти какой-код из Matlab в Python. У меня такая же проблема с выпуклой оптимизацией, работающая на MATLAB, но у меня возникли проблемы, передавающ...

16  Как преобразовать шестигранную строку в шестнадцатеричный номер?  ( How to convert hex string to hex number ) 
У меня есть целое число в бывшем. 16 И я пытаюсь преобразовать этот номер в шестнадцатеричный номер. Я пытался достичь этого, используя функцию Hex, но всякий...

2  Векторный способ применить 3-измерительную маску к RGB в Pytorch  ( Vectorized way to apply a 3 dimension mask to rgb in pytorch ) 
У меня есть тензор HXWX3, представляющий изображение RGB, и тензора RGBX3 (Boolean) Tensor в качестве ввода. Предполагается, что для каждого (i, j) в маске те...

2  Добавьте номера в шестнадцатеричном базе без конвертации баз?  ( Add numbers in hexadecimal base without converting bases ) 
Мне нужно написать функцию, которая получает два числа в шестнадцатеричном базе, и вычисляет сумму обоих из них, мне не разрешено преобразовывать их в десятич...