728x90
728x90
파이썬(Python)을 사용하여 애저(Azure) 데이터베이스 쿼리 실습하기
들어가며
- 파이썬(Python)을 사용하여 애저(Azure)에 올린 데이터베이스를 쿼리해보자.
- 이번 실습은 이전의 글(https://dev-astra.tistory.com/387)에 이어서 진행한다.
실습하기
OCBC 드라이버 설치하기
- 파이썬에서 @mssql@로 연결하는 방법은 일반적으로 @pyodbc@와 @pymssql@이 있으며, 이번 실습에서는 @pyodbc@를 사용한다.
- 윈도우(Windows)의 경우, 아래의 ODBC 드라이버를 설치한다.
- 필요한 경우 Visual C++ 재배포 패키지도 설치한다.
- 설치 사이트 : 클릭
- 윈도우 외의 OS는 아래 문서를 참고한다.
- 파이썬 및 Azure SQL Database의 데이터베이스를 자세히 살펴보려면 아래 문서를 참고한다.
pyodbc 설치하기
- 다음 명령을 실행하여 원격으로 @pyodbc@를 설치한다.
> pip install pyodbc
SQL 데이터베이스에 연결하기
- 텍스트 편집기에서 @sqltest.py@라는 새 파일을 만든다.
- 각각의 변수들에 데이터베이스 연결 정보를 입력한다.
import pyodbc
server = 'your_server.database.windows.net'
database = 'mySampleDatabase'
username = 'your_username'
password = 'your_password'
driver= '{ODBC Driver 18 for SQL Server}'
cnxn = pyodbc.connect('DRIVER=' + driver + '; PORT=1433; SERVER=' + server + ';PORT=1443; DATABASE=' + database + ';UID=' + username + ';PWD=' + password)
cursor = cnxn.cursor()
- 각각의 변수들에 넣을 값들은 애저 포털에서 배포한 데이터베이스 리소스 페이지에서 확인할 수 있다.
- 각각의 변수들에 값을 넣은 후, 파이썬 코드를 실행시킨다.
쿼리 실행하기
- @sqltest.py@ 파일에 다음 코드를 추가하여 실행한다.
cursor.execute("SELECT TOP 20 pc.Name as CategoryName, p.name as ProductName FROM [SalesLT].[ProductCategory] pc JOIN [SalesLT].[Product] p ON pc.productcategoryid = p.productcategoryid")
row = cursor.fetchone()
while row:
print (str(row[0]) + " " + str(row[1]))
row = cursor.fetchone()
행 삽입하기
- @sqltest.py@ 파일에 다음 코드를 추가하여 실행한다.
count = cursor.execute("""
INSERT INTO SalesLT.Product (Name, ProductNumber, StandardCost, ListPrice, SellStartDate)
VALUES (?, ?, ?, ?, GETDATE())""",
'SQL Server Express New 20', 'SQLEXPRESS New 20', 0, 0).rowcount
cnxn.commit()
print('Rows inserted: ' + str(count))
더보기
- 원래는 다음과 같이 MS Learn 사이트에서 주어진 예시 코드를 넣어 실행하려고 하였으나, @NameError: name 'CURRENT_TIMESTAMP' is not defined@ 오류가 출력되었다.
#Sample insert query
count = cursor.execute("""
INSERT INTO SalesLT.Product (Name, ProductNumber, StandardCost, ListPrice, SellStartDate)
VALUES (?,?,?,?,?)""",
'SQL Server Express New 20', 'SQLEXPRESS New 20', 0, 0, CURRENT_TIMESTAMP).rowcount
cnxn.commit()
print('Rows inserted: ' + str(count))
- @CURRENT_TIMESTAMP@는 SQL 서버에서 현재 시간을 가져오는 내장 함수인데, @CURRENT_TIMESTAMP@가 정의되지 않았기 때문에 발생하는 오류인 것이다.
- 이 문제를 해결하기 위해서 @CURRENT_TIMESTAMP@를 문자열로 쿼리에 포함시켰다. (다음과 같이 @execute@ 함수의 @SellStartDate@ 매개변수의 값으로 @GETDATE()@ 함수를 사용하여 현재 날짜와 시간으로 설정하도록 변경했다.)
count = cursor.execute("""
INSERT INTO SalesLT.Product (Name, ProductNumber, StandardCost, ListPrice, SellStartDate)
VALUES (?, ?, ?, ?, GETDATE())""",
'SQL Server Express New 20', 'SQLEXPRESS New 20', 0, 0).rowcount
cnxn.commit()
print('Rows inserted: ' + str(count))
@pyodbc@ 샘플 실습해보기
- 아래의 사이트에 있는 @pyodbc@ 샘플을 실습해본다.
참고 사이트
728x90
728x90
'DevOps > Azure' 카테고리의 다른 글
[Azure] 도커(Docker) 실습하기 : 도커 이미지를 다른 사람과 공유하여 사용해보기 (0) | 2023.05.27 |
---|---|
[Azure] 도커(Docker) 실습하기 : Dockerfile을 이용하여 직접 도커 이미지를 만들고 컨테이너 만들어보기 (0) | 2023.05.27 |
[Azure] 도커(Docker) 실습하기 : 간단한 실습 해보기 (0) | 2023.05.27 |
[Azure] 도커(Docker) 실습하기 : 도커 설치하기 (0) | 2023.05.27 |
[Azure] SQL Server 실습하기 (0) | 2023.05.24 |
[Azure] SSMS/VS Code를 사용하여 연결 및 쿼리 실습하기 (0) | 2023.05.23 |
[Azure] 단일 데이터베이스 만들기 (0) | 2023.05.23 |
[Azure] WebApp 생성 및 Flask 배포하기 (0) | 2023.05.23 |