Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách kết nối Python với SQL Server để tự động hóa quy trình phụ trợ

Tự động hóa các quy trình phụ trợ trong phiên bản SQL Server của bạn là một nhiệm vụ phổ biến. Cho dù đó là làm mới thống kê, xây dựng lại chỉ mục, đọc hoặc xóa dữ liệu, thì việc tích hợp các khung lập trình khác với RDBMS của bạn là vô cùng quý giá. Bài viết này sẽ xem xét các loại tác vụ này được tích hợp cụ thể với Python.

Chúng tôi sẽ không tập trung vào những câu hỏi cơ bản như SQL và Python là gì hay cách chúng tôi sử dụng chúng ở đâu và như thế nào. Thay vào đó, chúng tôi sẽ kiểm tra các trường hợp cụ thể yêu cầu kết hợp SQL và Python, và các mô-đun phương pháp khác nhau có sẵn để làm như vậy.

Chuỗi kết nối máy chủ SQL

Trước khi bắt đầu khám phá trường hợp Python kết nối với máy chủ SQL, chúng ta hãy làm quen với những điều cơ bản.

Một chuỗi kết nối đại diện cho các phần dữ liệu bắt buộc trỏ đến và xác thực cá thể cơ sở dữ liệu của bạn. Có thể có một số sắc thái nhỏ đối với từng loại phiên bản cơ sở dữ liệu, nhưng nói chung, thông tin bắt buộc sẽ là tên máy chủ, trình điều khiển cơ sở dữ liệu, tên người dùng, mật khẩu và số cổng.

Chi tiết phiên bản máy chủ SQL

Chi tiết của chuỗi kết nối này sẽ giống như khi bạn kết nối qua SSMS với cá thể cơ sở dữ liệu. Lưu ý về phiên bản cơ sở dữ liệu {SERVER} \ {INSTANCE} định dạng - đây là DESKTOP-6L1B155 \ FogelDev . Cũng có thể kết nối với tên máy chủ nếu bạn chỉ chạy một phiên bản mặc định duy nhất.

Cơ sở dữ liệu SQL Server và Chế độ lập bảng

Đầu tiên, chúng ta cần một cơ sở dữ liệu với cấu trúc bảng cần thiết để hoạt động với Python và SQL Server. Tập lệnh sau sẽ tạo một cơ sở dữ liệu như vậy và một bảng duy nhất trong đó. Bảng đó sẽ đóng vai trò là khu vực trình diễn để chúng ta xem cách sử dụng SQL và Python cùng nhau.

CREATE DATABASE CODESIGHT_DEMOS;
USE CODESIGHT_DEMOS;
CREATE TABLE POSTS
(
ID INT IDENTITY(1,1) PRIMARY KEY,
NAME VARCHAR(200),
Author VARCHAR(100),
URL VARCHAR(100),
DATE DATE
)

INSERT INTO POSTS
VALUES('Properly Dealing with Encryption of Databases in an AlwaysOn Availability Group Scenario','Alejandro Cobar','https://codingsight.com/encryption-of-databases-in-alwayson-availability-group-scenario/','4/23/2021')

INSERT INTO POSTS
VALUES('An Overview of DataFrames in Python','Aveek Das','https://codingsight.com/an-overview-of-dataframes-in-python/','4/23/2021')

INSERT INTO POSTS
VALUES('SQL Server Business Intelligence (BI) – Traditional Tools and Technologies','Haroon Ashraf','https://codingsight.com/sql-server-business-intelligence-bi-tools-and-technologies/','4/19/2021')

Mô-đun Python

Mục tiêu của chúng tôi bây giờ là xác định cách kết nối Python với các phiên bản máy chủ SQL. Nhiều mô-đun Python có sẵn để thực hiện tác vụ này và hai trong số chúng là chính. Chúng tôi sẽ đối phó với PYODC SQLAlchemy . Các mô-đun này xử lý phần kết nối của các hoạt động.

Cần có mã bổ sung để đọc dữ liệu từ các bảng SQL Server vào bộ nhớ. Đây là nơi Gấu trúc thư viện đi vào.

Gấu trúc có thể được tích hợp chặt chẽ với SQLALchemy để đọc dữ liệu trực tiếp vào DataFrame các đối tượng (trong lưu trữ dựa trên mảng bộ nhớ có thể hoạt động với tốc độ cực nhanh và trông giống như các bảng cơ sở dữ liệu).

Hãy xem một vài ví dụ về chuỗi kết nối.

Ví dụ đầu tiên sử dụng SQL Server và phiên bản từ ảnh chụp màn hình trước đó. Bạn có thể đặt các biến này thành các chi tiết cụ thể của mình để khởi tạo kết nối.

Cũng lưu ý rằng kết nối cụ thể này sử dụng xác thực Windows. Do đó, nó sẽ cố gắng xác thực với tư cách là người dùng từ máy Windows của tôi mà tôi đã đăng nhập. Nếu không có tên người dùng và mật khẩu nào được chỉ định, đây là hành vi mặc định trong chuỗi kết nối.

  • Tên máy chủ =‘DESKTOP-6L1B155’
  • Tên phiên bản =‘FogelDev’
  • Tên cơ sở dữ liệu =‘CODESIGHT_DEMOS’
  • Portnumber =‘1433’
print("mssql+pyodbc://@{SERVER}:{PORT}\\{INSTANCE}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber))

MSSQLengine = sqlalchemy.create_engine("mssql+pyodbc://@{SERVER}\\{INSTANCE}:{PORT}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber))

Chúng tôi có thể kiểm tra xem kết nối này có hoạt động chính xác hay không bằng cách thực hiện truy vấn với Pandas. Nó phải đọc một truy vấn từ chuỗi kết nối bằng cách sử dụng read_sql_query lệnh.

df = pd.read_sql_query("SELECT * FROM POSTS", MSSQLengine)
df

Xác thực máy chủ SQL

Điều gì sẽ xảy ra nếu bạn cần sử dụng chuỗi kết nối dựa trên xác thực máy chủ SQL để kết nối với Máy chủ SQL của mình? Chúng tôi có thể điều chỉnh mã Python của mình để thêm tên người dùng và mật khẩu vào SQLALchemy động cơ.

  • Tên máy chủ =‘DESKTOP-6L1B155’
  • Instancename =‘FogelDev’
  • Tên cơ sở dữ liệu =‘CODESIGHT_DEMOS’
  • Portnumber =‘1433’
  • Tên người dùng =‘CodingSightUser’
  • Mật khẩu ='Password123'
print("mssql+pyodbc://{USER}:{PASS}@{SERVER}:{PORT}\\{INSTANCE}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber,USER = Username, PASS = Password))
MSSQLengine = sqlalchemy.create_engine("mssql+pyodbc://{USER}:{PASS}@{SERVER}\\{INSTANCE}:{PORT}/{DATABASE}?driver=SQL+Server+Native+Client+11.0".format(SERVER = Servername, INSTANCE = Instancename,DATABASE = Databasename,PORT = Portnumber,USER = Username, PASS = Password))

Một lần nữa, chúng tôi đang kiểm tra kết nối của mình, nhưng lần này chúng tôi chỉ chọn 1 bản ghi từ bảng.

df = pd.read_sql_query("SELECT TOP 1 * FROM POSTS", MSSQLengine)
df

Ghi dữ liệu

Cuối cùng, hãy xem lấy dữ liệu Python vào bảng cơ sở dữ liệu SQL Server của chúng tôi. Chúng tôi tạo một đối tượng Dataframe và nối nó vào bảng.

Phương pháp Dataframe:

newdata = [{'Name': 'How to Create the Date Table in Power BI', 'Author': 'Haroon Ashraf', 'URL':'https://codingsight.com/how-to-create-date-table-in-power-bi/', 'Date':'4/21/21'}]
load_df = pd.DataFrame(newdata)
load_df.to_sql("POSTS", MSSQLengine, if_exists='append',index = False, chunksize = 200)

Một phương pháp khác sẽ là chèn dữ liệu trực tiếp vào bảng bằng lệnh thực thi.

Phương thức thực thi:

MSSQLengine.execute("INSERT INTO [POSTS] VALUES('SQL Query Optimization: 5 Core Facts to Boost Queries','Edwin Sanchez','https://codingsight.com/sql-query-optimization-5-core-facts-to-boost-queries/','3/31/21')");

Khi hoàn thành, bảng cuối cùng trông như sau. Nó có 3 hàng đầu tiên được tải bởi tập lệnh tạo SQL Server ban đầu và các hàng 4 và 5 được tải bằng Python.

Tóm tắt

Bài đăng này đánh dấu các tham số chuỗi kết nối để kết nối mã Python với SQL Server. Chúng tôi đã kiểm tra việc đọc dữ liệu từ SQL Server và kiểm tra hai phương pháp xác thực khác nhau - trường hợp cụ thể của Python kết nối với xác thực Windows máy chủ SQL và xác thực máy chủ SQL tiêu chuẩn. Ngoài ra, chúng tôi đã xem xét các phương pháp tải dữ liệu, một trong số đó liên quan đến việc sử dụng đối tượng DataFrame bằng Python và một phương thức khác là lệnh SQL INSERT thô.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tác dụng của gợi ý NOLOCK trong câu lệnh SELECT

  2. Phải khai báo lỗi biến @myvariable với truy vấn được tham số ADO

  3. Nhận danh sách tất cả các cột rỗng và không rỗng trong cơ sở dữ liệu SQL Server - Hướng dẫn SQL Server / T-SQL Phần 53

  4. String_agg cho SQL Server trước năm 2017

  5. Khóa ngoại cho khóa tổng hợp