이 빠른 시작에서는 Python 스크립트를 샘플 데이터로 만들고 로드한 데이터베이스에 연결합니다. Python용 드라이버를 사용하여 pyodbc
데이터베이스에 연결하고 데이터 읽기 및 쓰기와 같은 기본 작업을 수행합니다.
pyodbc 설명서 | pyodbc 소스 코드 | 패키지(PyPi)
필수 조건
Python 3
Python이 아직 없는 경우 python.orgPython 런타임 및 PyPI(Python 패키지 인덱스) 패키지 관리자를 설치합니다.
사용자 고유의 환경을 사용하지 않으시겠습니까? GitHub Codespaces를 사용하여 devcontainer로 엽니다.
pyodbc
PyPI의 패키지입니다.SQL Server, Azure SQL Database 또는 패브릭
AdventureWorks2022
의 SQL 데이터베이스에 있는 샘플 스키마와 유효한 연결 문자열의 데이터베이스입니다.
설치
다음 단계에 따라 Python 드라이버를 사용하여 pyodbc
애플리케이션을 개발하도록 개발 환경을 구성합니다.
비고
이 드라이버는 SQL Server, Fabric의 SQL Database 및 Azure SQL Database에서 기본적으로 사용하도록 설정된 TDS 프로토콜을 사용합니다. 추가 구성이 필요하지 않습니다.
pyodbc 패키지 설치
pyodbc
PyPI에서 패키지를 가져옵니다.
빈 디렉터리에서 명령 프롬프트를 엽니다.
pyodbc
패키지를 설치합니다.pip install pyodbc
설치된 패키지를 확인합니다
PyPI 명령줄 도구를 사용하여 원하는 패키지가 설치되어 있는지 확인할 수 있습니다.
을 사용하여 설치된 패키지 목록을 확인합니다.
pip list
pip list
SQL 데이터베이스 만들기
이 빠른 시작에는 Microsoft SQL Server의 AdventureWorks2022 경량 스키마, 패브릭의 SQL 데이터베이스 또는 Azure SQL Database가 필요합니다.
코드 실행
새 파일 만들기
이름이
app.py
인 새 파일을 만듭니다.모듈 문서 문자열을 추가합니다.
""" Connects to a SQL database using pyodbc """
pyodbc
패키지를 가져옵니다.from os import getenv from dotenv import load_dotenv from pyodbc import connect
이 함수를
pyodbc.connect
사용하여 SQL 데이터베이스에 연결합니다.load_dotenv() conn = connect(getenv("SQL_CONNECTION_STRING"))
현재 디렉터리에서 새 파일을 만듭니다
*.env
.*.env
파일 내부에서SQL_CONNECTION_STRING
이라는 이름의 연결 문자열 항목을 추가합니다. 여기서 예제를 실제 연결 문자열 값으로 바꿉다.SQL_CONNECTION_STRING="Driver={ODBC Driver 18 for SQL Server};Server=<server_name>;Database={<database_name>};Encrypt=yes;TrustServerCertificate=no;Authentication=ActiveDirectoryInteractive"
팁 (조언)
여기서 사용되는 연결 문자열은 연결하려는 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() 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.fetchval
단일 결과의 첫 번째 열을 가져오고 결과의 고유 식별자를 인쇄한 다음 작업을 트랜잭션으로 커밋합니다connection.commit
.resultId = cursor.fetchval() print(f"Inserted Product ID : {resultId}") conn.commit()
팁 (조언)
필요에 따라 트랜잭션을 롤백하는 데 사용할
connection.rollback
수 있습니다.cursor.close
및connection.close
를 사용하여 커서와 연결을 닫습니다.cursor.close() conn.close()
파일을
app.py
하고 애플리케이션을 다시 테스트합니다.python app.py
예상 출력은 다음과 같습니다.
Inserted Product ID : 1001
다음 단계
더 많은 예제를 pyodbc
보려면 드라이버 GitHub 리포지토리를 방문하여 아이디어를 기여하거나 문제를 보고하세요.