Python을 사용하여 Microsoft SQL 서버에 연결
Microsoft SQL 서버의 일부 SQL 데이터베이스에서 일부 쿼리를 실행하기 위해 Python을 통해 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}로 변경해 보았고 이전에 SAS에서 ODBC 링크를 사용하여 연결했는데, 이는 부분적으로 위 코드의 기반이되었으므로 다른 것을 설치할 필요가 없다고 생각합니다.
Pyodbc- "데이터 소스 이름을 찾을 수 없으며 기본 드라이버가 지정되지 않았습니다."
감사
이게 내가하는 방법 ...
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,))
관련 리소스 :
이전에 말한 내용에 약간의 추가. 데이터 프레임을 반환하고 싶을 것입니다. 이것은 다음과 같이 수행됩니다.
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)
클라이언트와 서버 간의 데이터 소스 연결에는 DRIVER를 사용하는 ODBC와 PROVIDER를 사용하는 OLEDB의 두 가지 일반적인 유형이 있습니다. 그리고 프로그래밍 세계에서는 데이터 소스에 연결할 경로에 대한 정기적 인 토론 입니다.
공급자를 사용하고 SQLOLEDB
있지만 해당 공급자를 드라이버로 지정하고 있습니다. 내가 아는 한 pyodbc와 pypyodbc 모듈은 Window OLEDB 연결을 지원하지 않습니다. 그러나 adodbapi 는 Microsoft ADO를 기본 구성 요소로 사용합니다.
다음은 연결 매개 변수에 대한 두 가지 방법입니다. 또한 연결이 문자열 내에서 따옴표를 제대로 나누지 않았으므로 변수를 문자열 형식으로 지정 합니다. 연결 문자열에 필요하고 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()
나는이 방법을 선호합니다 ... 훨씬 쉬웠습니다
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에서 작동하도록 만들었습니다.
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()
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();
}
An alternative approach would be installing Microsoft ODBC Driver 13, then replace SQLOLEDB
with ODBC Driver 13 for SQL Server
Regards.
참고URL : https://stackoverflow.com/questions/33725862/connecting-to-microsoft-sql-server-using-python
'program tip' 카테고리의 다른 글
Python에서 범위를 벗어난 인덱스에 대한 기본값 가져 오기 (0) | 2020.10.28 |
---|---|
Dagger 2.2 컴포넌트 빌더 모듈 메소드가 더 이상 사용되지 않음 (0) | 2020.10.28 |
Docker를 1.12로 업데이트 한 후 이미지를 가져 오기 / 푸시 할 수 없음 (0) | 2020.10.28 |
HttpWebRequest는 매우 느립니다! (0) | 2020.10.28 |
사용자 지정 아이콘이있는 소셜 공유 링크 (0) | 2020.10.28 |