Hướng dẫn dùng Python kết nối SQL Server

Note - Tip - Trick Python

5.0 (1 đánh giá)
Tạo bởi Lê Châu Cập nhật lần cuối 16:53 23-06-2024 2.722 lượt xem 0 bình luận
Tác giả/Dịch giả: Lê Châu
Học nhanh

Danh sách bài học

Hướng dẫn dùng Python kết nối SQL Server

Dẫn nhập

Trong việc học tập để trở thành lập trình viên, chúng ta cũng phải biết cách dùng ngôn ngữ lập trình tương tác với hệ thống database để có thể phát triển phần mềm. Bài viết ngắn này sẽ hướng dẫn các bạn cách dùng Python kết nối hệ quản trị dữ liệu SQL Server.


Chuẩn bị môi trường

Trước khi thực hành thì các bạn phải bảo đảm máy tính đã có Python và SQL Server, để cài đặt thì các bạn có thể theo các bài sau:

  1. Cài đặt môi trường Python
  2. Cài đặt SQL Server 2019

Sau đó chúng ta sẽ tạo một database và dữ liệu đơn giản để phục vụ bài học

Kteam sẽ đặt tên database là python

Giờ sẽ tạo table mẫu

Mình sẽ tạo table có tên và các cột như sau

nhấn tổ hợp phím Ctrl + S để lưu lại và đặt tên bảng là user

Bây giờ Kteam sẽ tạo vài dữ liệu mẫu

Ta thêm vài record dữ liệu theo ý muốn

Tiếp theo ta sẽ tạo 1 tài khoản của SQL Server để dùng nó cho việc truy cập database thông qua python. Từ Server Instance Name, ta vào Security rồi Login, nhấn chuột phải chọn New Login

Ta tạo user login như sau:

Rồi bạn cho phép user login đó truy cập database python như sau, ta click user login test mới tạo

Chọn User Mapping và tick database python 

Rồi ta grant cho user login toàn bộ quyền xử lý table user bằng câu lệnh SQL sau:

GRANT ALL ON "dbo"."user" TO "test"


Sử dụng thư viện pyodbc

pyodbc là module của Python để truy cập các database ODBC như Mysql, Oracle, Access và SQL Server. Để cài đặt module pyodbc ta sẽ dùng lệnh pip cài đặt như sau:

pip install pyodbc

Để truy cập vào SQL Server, ta sẽ dùng function connect của pyodbc như sau:

import pyodbc
pyodbc.connect('DRIVER={driver};SERVER=server;DATABASE=db;UID=login;PWD=pass')

Phương thức connect sẽ truyền đoạn string có cung cấp thông tin để kết nối đến server, sẽ có những thông tin cơ bản sau:

  • driver: tên driver để kết nối đến hệ quản trị cơ dữ liệu.
  • server: tên server để kết nối.
  • db: tên database muốn truy cập.
  • login: tên user login.
  • pass: password của user login

Bây giờ để kết nối SQL Server của máy tính, mình sẽ cung cấp các thông tin đó như sau:

  • driver: vì kết nối SQL Server nên ta dùng giá trị ODBC Driver 17 for SQL Server
  • server: tên server để kết nối, các bạn có thể tìm ở phần connect lúc đầu của Microsoft SQL Server Management Studio

  • db: dùng database python
  • login pass: dùng thông tin user login ta đã tạo ở phía trên

Như vậy dựa vào thông tin đã có, Kteam sẽ viết code connect như sau:

import pyodbc

driver = "{ODBC Driver 17 for SQL Server}"
server = 'DESKTOP-F3112RH\KTEAM'
database = "python"
login = "test"
password = "test"

conn = pyodbc.connect(f'DRIVER={driver};SERVER={server};DATABASE={database};UID={login};PWD={password}')
print(conn)

Ta sẽ chạy thử để xem có kết nối thành công không:


Truy vấn thông tin

Việc truy vấn vào database ta sẽ tạo một cursor từ connection, sau đó dùng cursor này để gửi câu lệnh SQL.

conn = pyodbc.connect(f'DRIVER={driver};SERVER={server};DATABASE={database};UID={login};PWD={password}')
cursor = conn.cursor()

cursor.execute("SQL")

Câu lệnh select

Khi execute câu Select, ta sẽ dùng phương thức fetchone để lấy từng record trong bảng

cursor = conn.cursor()
cursor.execute("select * from [user]")

print(cursor.fetchone())
print(cursor.fetchone())

Hoặc ta dùng phương thức fetchall để tra về một tuple:

cursor = conn.cursor()
cursor.execute("select * from [user]")

print(cursor.fetchall())

Hoặc ta có thể viết ngắn gọn trong vòng lặp for như sau:

cursor = conn.cursor()
for row in cursor.execute("select * from [user]"):
    print(row)

Để chạy câu truy vấn có điều kiện, ta nên dùng parameters để truyền dữ liệu điều kiện, như vậy có thể tránh SQL Injection

cursor = conn.cursor()
query = "select * from [user] where name = ? or id = ?"
parameters = ["chau", "1"]

for row in cursor.execute(query, parameters):
print(row)

Các giá trị của list parameters sẽ thay thế lần lượt các dấu ? trong query

Câu lệnh insert

Ở câu lệnh insert, sau khi execute ta phải chạy phương thức commit để xác nhận thêm dữ liệu, ta cũng nên dùng parameters để đảo bảo an toàn cho chương trình.

cursor = conn.cursor()
query = "insert into [user] (id, name, age) values (?, ?, ?)"
parameters = ["3", "Long", "27"]

cursor.execute(query, parameters)
cursor.commit()

print(f"inserted: {cursor.rowcount} row")

Câu lệnh update

Câu lệnh update khá là tương tự như cách sử dụng insert


cursor = conn.cursor()
query = "update [user] set name = ? where id = ?"
parameters = ["Long Kteam", "3"]
 
cursor.execute(query, parameters)
cursor.commit()

print(f"updated: {cursor.rowcount} row")

query = "select * from [user] where id = ?"
parameters = ["3"]

for row in cursor.execute(query, parameters):
        print(row)

Đây là 1 số các thao tác cơ bản, để xem đầy đủ thì bạn nên xem document gốc ở đây


Tải xuống

Tài liệu

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Hướng dẫn dùng Python kết nối SQL Server dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên likeshare để ủng hộ Kteam và tác giả nhé!


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.

Nội dung bài viết

Tác giả/Dịch giả

Quan tâm lập trình và lịch sử.

Thích tìm hiểu công nghệ mới

Khóa học

Note - Tip - Trick Python

Note - Tip - Trick Python

Đánh giá

Dangngocnhan đã đánh giá 10:37 03-10-2024

hay

Bình luận

Để bình luận, bạn cần đăng nhập bằng tài khoản Howkteam.

Đăng nhập
Không có video.