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


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:
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 và 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 like và share để ủ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
hay