이 빠른 시작에서는 Python 스크립트를 샘플 데이터로 만들고 로드한 데이터베이스에 연결합니다. Python용 드라이버를 사용하여 pymssql
데이터베이스에 연결하고 데이터 읽기 및 쓰기와 같은 기본 작업을 수행합니다.
pymssql 설명서 | pymssql 소스 코드 | 패키지(PyPi)
필수 조건
Python 3
Python이 아직 없는 경우 python.orgPython 런타임 및 PyPI(Python 패키지 인덱스) 패키지 관리자를 설치합니다.
사용자 고유의 환경을 사용하지 않으시겠습니까? GitHub Codespaces를 사용하여 devcontainer로 엽니다.
pymssql
PyPI의 패키지입니다.SQL Server, Azure SQL Database 또는 패브릭
AdventureWorks2022
의 SQL 데이터베이스에 있는 샘플 스키마와 유효한 연결 문자열의 데이터베이스입니다.
설치
다음 단계에 따라 Python 드라이버를 사용하여 pymssql
애플리케이션을 개발하도록 개발 환경을 구성합니다.
비고
이 드라이버는 SQL Server, Fabric의 SQL Database 및 Azure SQL Database에서 기본적으로 사용하도록 설정된 TDS 프로토콜을 사용합니다. 추가 구성이 필요하지 않습니다.
pymssql 패키지 설치
pymssql
PyPI에서 패키지를 가져옵니다.
빈 디렉터리에서 명령 프롬프트를 엽니다.
pymssql
패키지를 설치합니다.pip install pymssql
설치된 패키지를 확인합니다
PyPI 명령줄 도구를 사용하여 원하는 패키지가 설치되어 있는지 확인할 수 있습니다.
을 사용하여 설치된 패키지 목록을 확인합니다.
pip list
pip list
SQL 데이터베이스 만들기
이 빠른 시작에는 Microsoft SQL Server의 AdventureWorks2022 경량 스키마, 패브릭의 SQL 데이터베이스 또는 Azure SQL Database가 필요합니다.
코드 실행
새 파일 만들기
이름이
app.py
인 새 파일을 만듭니다.모듈 문서 문자열을 추가합니다.
""" Connects to a SQL database using pymssql """
를 포함하여
pymssql
패키지를 가져옵니다.from os import getenv from dotenv import load_dotenv from pymssql import connect
이 함수를
pymssql.connect
사용하여 SQL 데이터베이스에 연결합니다.load_dotenv() conn = connect(getenv("SQL_SERVER"),getenv("SQL_USER"),getenv("SQL_PASSWORD"),getenv("SQL_DATABASE"))
현재 디렉터리에서 새 파일을 만듭니다
*.env
.*.env
파일 내에서 연결 문자열 값SQL_SERVER
,SQL_USER
,SQL_PASSWORD
,SQL_DATABASE
에 대한 항목을 추가합니다. 실제 연결 문자열 값으로 자리 표시자를 바꾸세요.SQL_SERVER="<server_name>" SQL_USER="<sql_user_name>" SQL_PASSWORD="<sql_user_password>" SQL_DATABASE="<sql_database>"
팁 (조언)
여기서 사용되는 연결 문자열은 연결하려는 SQL 데이터베이스의 유형에 따라 크게 달라집니다. 연결 문자열 및 해당 구문에 대한 자세한 내용은 연결 문자열 구문 참조를 참조하세요.
쿼리 실행
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(as_dict=True) cursor.execute(SQL_QUERY)
비고
이 함수는 기본적으로 모든 쿼리를 허용하고 cursor.fetchone()을 사용하여 반복할 수 있는 결과 집합을 반환합니다.
루프를
foreach
사용하여 데이터베이스에서 모든 레코드를 가져옵니다. 그런 다음 레코드를 인쇄합니다.for r in cursor: 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 (%s, %s, %s, %s, 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
다음 단계
더 많은 예제를 pymssql
보려면 드라이버 GitHub 리포지토리를 방문하여 아이디어를 기여하거나 문제를 보고하세요.