다음을 통해 공유


빠른 시작: Python용 pymssql 드라이버로 연결

이 빠른 시작에서는 Python 스크립트를 샘플 데이터로 만들고 로드한 데이터베이스에 연결합니다. Python용 드라이버를 사용하여 pymssql 데이터베이스에 연결하고 데이터 읽기 및 쓰기와 같은 기본 작업을 수행합니다.

pymssql 설명서 | pymssql 소스 코드 | 패키지(PyPi)

필수 조건

  • Python 3

  • pymssql PyPI의 패키지입니다.

  • SQL Server, Azure SQL Database 또는 패브릭 AdventureWorks2022의 SQL 데이터베이스에 있는 샘플 스키마와 유효한 연결 문자열의 데이터베이스입니다.

설치

다음 단계에 따라 Python 드라이버를 사용하여 pymssql 애플리케이션을 개발하도록 개발 환경을 구성합니다.

비고

이 드라이버는 SQL Server, Fabric의 SQL Database 및 Azure SQL Database에서 기본적으로 사용하도록 설정된 TDS 프로토콜을 사용합니다. 추가 구성이 필요하지 않습니다.

pymssql 패키지 설치

pymssql PyPI에서 패키지를 가져옵니다.

  1. 빈 디렉터리에서 명령 프롬프트를 엽니다.

  2. pymssql 패키지를 설치합니다.

    pip install pymssql
    

설치된 패키지를 확인합니다

PyPI 명령줄 도구를 사용하여 원하는 패키지가 설치되어 있는지 확인할 수 있습니다.

  1. 을 사용하여 설치된 패키지 목록을 확인합니다.pip list

    pip list
    

SQL 데이터베이스 만들기

이 빠른 시작에는 Microsoft SQL Server의 AdventureWorks2022 경량 스키마, 패브릭의 SQL 데이터베이스 또는 Azure SQL Database가 필요합니다.

코드 실행

새 파일 만들기

  1. 이름이 app.py인 새 파일을 만듭니다.

  2. 모듈 문서 문자열을 추가합니다.

    """
    Connects to a SQL database using pymssql
    """
    
  3. 를 포함하여 pymssql패키지를 가져옵니다.

    from os import getenv
    from dotenv import load_dotenv
    from pymssql import connect
    
  4. 이 함수를 pymssql.connect 사용하여 SQL 데이터베이스에 연결합니다.

    load_dotenv()
    conn = connect(getenv("SQL_SERVER"),getenv("SQL_USER"),getenv("SQL_PASSWORD"),getenv("SQL_DATABASE"))
    
  5. 현재 디렉터리에서 새 파일을 만듭니다 *.env.

  6. *.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 쿼리 문자열을 사용하여 쿼리를 실행하고 결과를 구문 분석합니다.

  1. 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;
    """
    
  2. 데이터베이스에 대한 쿼리에서 결과 집합을 검색하는 데 사용합니다 cursor.execute .

    cursor = conn.cursor(as_dict=True)
    cursor.execute(SQL_QUERY)
    

    비고

    이 함수는 기본적으로 모든 쿼리를 허용하고 cursor.fetchone()을 사용하여 반복할 수 있는 결과 집합을 반환합니다.

  3. 루프를 foreach 사용하여 데이터베이스에서 모든 레코드를 가져옵니다. 그런 다음 레코드를 인쇄합니다.

    for r in cursor:
        print(f"{r['CustomerID']}\t{r['OrderCount']}\t{r['CompanyName']}")
    
  4. 파일을 저장합니다app.py.

  5. 터미널을 열고 애플리케이션을 테스트합니다.

    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 삽입 공격으로부터 애플리케이션을 보호합니다.

  1. 최상단에 randrangerandom 라이브러리에서 가져와 app.py에 추가합니다.

    from random import randrange
    
  2. app.py의 끝에 난수 제품 번호를 생성하는 코드를 추가합니다.

    productNumber = randrange(1000)
    

    팁 (조언)

    여기에서 무작위 제품 번호를 생성하면 이 샘플을 여러 번 실행할 수 있습니다.

  3. SQL 문 문자열을 만듭니다.

    SQL_STATEMENT = """
    INSERT SalesLT.Product (
    Name,
    ProductNumber,
    StandardCost,
    ListPrice,
    SellStartDate
    ) OUTPUT INSERTED.ProductID
    VALUES (%s, %s, %s, %s, CURRENT_TIMESTAMP)
    """
    
  4. 를 사용하여 문을 실행합니다 cursor.execute.

    cursor.execute(
        SQL_STATEMENT,
        (
            f'Example Product {productNumber}',
            f'EXAMPLE-{productNumber}',
            100,
            200
        )
    )
    
  5. cursor.fetchone를 사용하여 단일 결과를 가져온 후, 결과의 고유 식별자를 출력하고, connection.commit를 사용하여 작업을 트랜잭션으로 커밋합니다.

    result = cursor.fetchone()
    print(f"Inserted Product ID : {result['ProductID']}")
    conn.commit()
    

    팁 (조언)

    필요에 따라 트랜잭션을 롤백하는 데 사용할 connection.rollback 수 있습니다.

  6. cursor.closeconnection.close를 사용하여 커서와 연결을 닫습니다.

    cursor.close()
    conn.close()
    
  7. 파일을 app.py하고 애플리케이션을 다시 테스트합니다.

    python app.py
    

    예상 출력은 다음과 같습니다.

    Inserted Product ID : 1001
    

다음 단계

더 많은 예제를 pymssql 보려면 드라이버 GitHub 리포지토리를 방문하여 아이디어를 기여하거나 문제를 보고하세요.