Próbuję połączyć się z SQL przez Pythona, aby uruchomić niektóre zapytania w niektórych bazach danych SQL na serwerze Microsoft SQL. Z moich badań w Internecie i na tym forum wynika, że najbardziej obiecującą biblioteką jest piodbc. Więc stworzyłem następujący kod
import pyodbc
conn = pyodbc.connect(init_string="driver={SQLOLEDB}; server=+ServerName+;
database=+MSQLDatabase+; trusted_connection=true")
cursor = conn.cursor()
i otrzymaj następujący błąd
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)')
Przejrzałem następujące posty i próbowałem zmienić mój sterownik na {sql server} i łączyłem się wcześniej za pomocą linków ODBC w SAS, na czym częściowo opiera się mój powyższy kod, więc nie myśl, że muszę instalować cokolwiek innego.
Pyodbc - „Nie znaleziono nazwy źródła danych i nie określono domyślnego sterownika”
Dzięki
adodbapi
aby korzystać z połączenia OLEDB. Format łańcucha jest zalecanym sposobem przekazywania zmiennych do łańcucha zamiast używania+
operatora. Nawiasy klamrowe z liczbami to symbole zastępcze, które odpowiednio sięformat()
wypełniają. Możesz nawet przekazywać listy i krotki za pomocąformat()
. Twój oryginalny kod nie dzielił ciągu znaków i zmiennych za pomocą cudzysłowów, więc+
został uznany za część ciągu.Wolę ten sposób ... to było dużo łatwiejsze
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')
źródło
Oto kilka zdjęć dla początkujących.
źródło
Spróbuj użyć pytds, działa w bardziej złożonym środowisku
pyodbc
i łatwiejszym w konfiguracji.Zrobiłem to na Ubuntu 18.04
Przykładowy kod w dokumentacji:
import pytds with pytds.connect('server', 'database', 'user', 'password') as conn: with conn.cursor() as cur: cur.execute("select 1") cur.fetchall()
źródło
Poniższy kod Pythona zadziałał dla mnie. Aby sprawdzić połączenie ODBC, najpierw utworzyłem 4-wierszową aplikację konsoli C #, jak pokazano poniżej.
Kod Pythona
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()
Wywołanie procedury składowanej
dfProcResult = pd.read_sql_query('exec dbo.usp_GetPatientProfile ?', cnxn, params=['MyParam'] )
Program C # do sprawdzania połączenia 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(); }
źródło
Alternatywnym podejściem byłoby zainstalowanie sterownika Microsoft ODBC Driver 13, a następnie zastąpienie
SQLOLEDB
goODBC Driver 13 for SQL Server
Pozdrowienia.
źródło
oto ten, który działa dla mnie:
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))
źródło
Znalazłem aktualne zasoby tutaj: Microsoft | Dokumenty SQL | Sterownik języka Python SQL
Wyjaśniono te dwie opcje, w tym wszystkie wymagane wymagania wstępne i przykłady kodu: Sterownik Python SQL - pyodbc (przetestowany i działający) Sterownik Python SQL - pymssql
źródło
Moja wersja. Mam nadzieję, że to pomoże.
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
źródło
Próbowałem połączyć się z serwerem sql w następujący sposób i te zadziałały.
Aby połączyć się przy użyciu uwierzytelniania systemu 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")
Aby skorzystać z uwierzytelniania serwera sql, użyłem następującego kodu.
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")
źródło
Spróbuj z
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)
Wynik:
Połączenie można również sprawdzić z terminala za pomocą pojedynczej linii kodu z
sqlcmd
. Zobacz składnię .╔═════════╦═════════════════════════════════════════╗ ║ 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"
wynik:
źródło