Я пытаюсь подключиться к SQL через python для выполнения некоторых запросов в некоторых базах данных 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 - «Имя источника данных не найдено, и драйвер по умолчанию не указан»
Благодарность
adodbapi
чтобы использовать соединение OLEDB. Строковый формат - это рекомендуемый способ передачи переменных в строку вместо использования+
оператора. Фигурные скобки с числами являются заполнителями, которыеformat()
заполняются соответствующим образом. Вы даже можете передавать списки и кортежи, используяformat()
. Ваш исходный код не разбивал строку и переменные кавычками, поэтому+
считался частью строки.Я предпочитаю этот способ ... было намного проще
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')
источник
Вот несколько картинок для новичков.
источник
Попробуйте использовать pytds, он работает в более сложной среде
pyodbc
и его проще настроить.Я заставил его работать на Ubuntu 18.04
Пример кода в документации:
import pytds with pytds.connect('server', 'database', 'user', 'password') as conn: with conn.cursor() as cur: cur.execute("select 1") cur.fetchall()
источник
Для меня работал следующий код Python. Чтобы проверить соединение ODBC, я сначала создал 4-строчное консольное приложение C #, как указано ниже.
Код 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 # для проверки подключения 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(); }
источник
Альтернативный подход - установка драйвера Microsoft ODBC 13 с последующей заменой
SQLOLEDB
наODBC Driver 13 for SQL Server
С уважением.
источник
вот тот, который мне подходит:
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))
источник
Я нашел здесь самые свежие ресурсы: Microsoft | Документы SQL | Драйвер Python SQL
Здесь объясняются эти два варианта, включая все необходимые предварительные условия и примеры кода: Драйвер Python SQL - pyodbc (проверено и работает) Драйвер Python SQL - pymssql
источник
Моя версия. Надеюсь, это поможет.
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
источник
Я попытался подключить sql-сервер следующими способами, и они сработали для меня.
Для подключения с использованием проверки подлинности 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, я использовал следующий код.
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")
источник
Попробуйте
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"\n\nSERVER VERSION:\n\n{row[0]}") cursor.close() conn.close() except Exception: print("\nERROR: Unable to connect to the server.") exit(-1)
Выход:
Соединение также можно проверить с терминала с помощью одной строки кода с
sqlcmd
. См. Синтаксис .╔═════════╦═════════════════════════════════════════╗ ║ 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"
выход:
источник