이 빠른 시작에서는 Python 스크립트를 샘플 데이터로 만들고 로드한 데이터베이스에 연결합니다. Python용 드라이버를 사용하여 mssql-python
데이터베이스에 연결하고 데이터 읽기 및 쓰기와 같은 기본 작업을 수행합니다.
mssql-python 설명서 | mssql-python 소스 코드 | 패키지(PyPi)
필수 조건
Python 3
Python이 아직 없는 경우 python.orgPython 런타임 및 PyPI(Python 패키지 인덱스) 패키지 관리자를 설치합니다.
사용자 고유의 환경을 사용하지 않으시겠습니까? GitHub Codespaces를 사용하여 devcontainer로 엽니다.
mssql-python
PyPI의 패키지입니다.SQL Server, Azure SQL Database 또는 패브릭
AdventureWorks2022
의 SQL 데이터베이스에 있는 샘플 스키마와 유효한 연결 문자열의 데이터베이스입니다.
설치
다음 단계에 따라 Python 드라이버를 사용하여 mssql-python
애플리케이션을 개발하도록 개발 환경을 구성합니다.
비고
이 드라이버는 SQL Server, Fabric의 SQL 데이터베이스 및 Azure SQL Database에서 기본적으로 사용하도록 설정되는 TDS(테이블 형식 데이터 스트림) 프로토콜을 사용합니다. 추가 구성이 필요하지 않습니다.
mssql-python 패키지 설치
mssql-python
PyPI에서 패키지를 가져옵니다.
빈 디렉터리에서 명령 프롬프트를 엽니다.
mssql-python
패키지를 설치합니다.
python-dotenv 패키지 설치
python-dotenv
PyPI에서 가져옵니다.
동일한 디렉터리에 패키지를 설치합니다
python-dotenv
.pip install python-dotenv
설치된 패키지를 확인합니다
PyPI 명령줄 도구를 사용하여 원하는 패키지가 설치되어 있는지 확인할 수 있습니다.
을 사용하여 설치된 패키지 목록을 확인합니다.
pip list
pip list
SQL 데이터베이스 만들기
이 빠른 시작에는 Microsoft SQL Server의 AdventureWorks2022 경량 스키마, 패브릭의 SQL 데이터베이스 또는 Azure SQL Database가 필요합니다.
코드 실행
새 파일 만들기
이름이
app.py
인 새 파일을 만듭니다.모듈 문서 문자열을 추가합니다.
""" Connects to a SQL database using mssql-python """
를 포함하여
mssql-python
패키지를 가져옵니다.from os import getenv from dotenv import load_dotenv from mssql_python import connect
이 함수를
mssql-python.connect
사용하여 SQL 데이터베이스에 연결합니다.load_dotenv() conn = connect(getenv("SQL_CONNECTION_STRING"))
현재 디렉터리에서 새 파일을 만듭니다
.env
..env
파일 내부에서SQL_CONNECTION_STRING
이라는 이름의 연결 문자열 항목을 추가합니다. 여기서 예제를 실제 연결 문자열 값으로 바꿉다.SQL_CONNECTION_STRING="Server=<server_name>;Database={<database_name>};Encrypt=yes;TrustServerCertificate=no;Authentication=ActiveDirectoryInteractive"
팁 (조언)
여기서 사용되는 연결 문자열은 연결하려는 SQL 데이터베이스의 유형에 따라 크게 달라집니다. Azure SQL Database 또는 Fabric의 SQL 데이터베이스에 연결하는 경우 연결 문자열 탭에서 ODBC 연결 문자열을 사용합니다. 시나리오에 따라 인증 유형을 조정해야 할 수도 있습니다. 연결 문자열 및 해당 구문에 대한 자세한 내용은 연결 문자열 구문 참조를 참조하세요.
쿼리 실행
SQL 쿼리 문자열을 사용하여 쿼리를 실행하고 결과를 구문 분석합니다.
SQL 쿼리 문자열에 대한 변수를 만듭니다.
SQL_QUERY = """ SELECT TOP 5 c.CustomerID, c.CompanyName, COUNT(soh.SalesOrderID) AS OrderCount FROM SalesLT.Customer AS c LEFT OUTER JOIN SalesLT.SalesOrderHeader AS soh ON c.CustomerID = soh.CustomerID GROUP BY c.CustomerID, c.CompanyName ORDER BY OrderCount DESC; """
데이터베이스에 대한 쿼리에서 결과 집합을 검색하는 데 사용합니다
cursor.execute
.cursor = conn.cursor() cursor.execute(SQL_QUERY)
비고
이 함수는 기본적으로 모든 쿼리를 허용하고 cursor.fetchone()을 사용하여 반복할 수 있는 결과 집합을 반환합니다.
cursor.fetchall
와foreach
루프를 사용하여 데이터베이스에서 모든 레코드를 가져옵니다. 그런 다음 레코드를 인쇄합니다.records = cursor.fetchall() for r in records: print(f"{r.CustomerID}\t{r.OrderCount}\t{r.CompanyName}")
파일을 저장합니다
app.py
.터미널을 열고 애플리케이션을 테스트합니다.
python app.py
예상 출력은 다음과 같습니다.
29485 1 Professional Sales and Service 29531 1 Remarkable Bike Store 29546 1 Bulk Discount Store 29568 1 Coalition Bike Company 29584 1 Futuristic Bikes
행을 트랜잭션으로 삽입
INSERT 문을 안전하게 실행하고 매개 변수를 전달합니다. 매개 변수를 값으로 전달하면 SQL 삽입 공격으로부터 애플리케이션을 보호합니다.
최상단에
randrange
를random
라이브러리에서 가져와app.py
에 추가합니다.from random import randrange
app.py
의 끝에 난수 제품 번호를 생성하는 코드를 추가합니다.productNumber = randrange(1000)
팁 (조언)
여기에서 무작위 제품 번호를 생성하면 이 샘플을 여러 번 실행할 수 있습니다.
SQL 문 문자열을 만듭니다.
SQL_STATEMENT = """ INSERT SalesLT.Product ( Name, ProductNumber, StandardCost, ListPrice, SellStartDate ) OUTPUT INSERTED.ProductID VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP) """
를 사용하여 문을 실행합니다
cursor.execute
.cursor.execute( SQL_STATEMENT, ( f'Example Product {productNumber}', f'EXAMPLE-{productNumber}', 100, 200 ) )
cursor.fetchone
를 사용하여 단일 결과를 가져온 후, 결과의 고유 식별자를 출력하고,connection.commit
를 사용하여 작업을 트랜잭션으로 커밋합니다.result = cursor.fetchone() print(f"Inserted Product ID : {result['ProductID']}") conn.commit()
팁 (조언)
필요에 따라 트랜잭션을 롤백하는 데 사용할
connection.rollback
수 있습니다.cursor.close
및connection.close
를 사용하여 커서와 연결을 닫습니다.cursor.close() conn.close()
파일을
app.py
하고 애플리케이션을 다시 테스트합니다.python app.py
예상 출력은 다음과 같습니다.
Inserted Product ID : 1001
다음 단계
더 많은 예제를 mssql-python
보려면 드라이버 GitHub 리포지토리를 방문하여 아이디어를 기여하거나 문제를 보고하세요.