Chèn dữ liệu vào máy chủ sql python

Trước khi bắt đầu bài viết về kết nối SQL Server với Python, tôi khuyên những người mới học nên kiểm tra khái niệm cơ bản về Python từ trang web Python hoặc bất kỳ trang web nào khác được đề xuất trên Google. Chúng ta có thể kết nối Python với nhiều loại cơ sở dữ liệu khác nhau, bao gồm MySQL, SQL Server, Oracle và Sybase, v.v. Vì vậy, trong hướng dẫn này, tôi sẽ giải thích cách chúng ta có thể kết nối với SQL Server. Để kết nối với bất kỳ cơ sở dữ liệu nào, chúng tôi chủ yếu làm theo 4 bước

  1. Nhập mô-đun API [tương tự như Không gian tên được sử dụng trong. Bọc lưới]
  2. Thiết lập kết nối với cơ sở dữ liệu bằng cách sử dụng hàm tạo kết nối. kết nối [thông số. ] Cần một số tham số như-Trình điều khiển, Máy chủ, Cơ sở dữ liệu, Uid, Trình điều khiển Pwd- Chủ yếu phụ thuộc vào cơ sở dữ liệu bạn đang sử dụng. Theo cơ sở dữ liệu, trình điều khiển này sẽ thay đổi.
    Server- Đây là tên của máy chủ chứa cơ sở dữ liệu.
    Cơ sở dữ liệu- Tên cơ sở dữ liệu.
    Uid- Đây là userId cho cơ sở dữ liệu của bạn.
    Pwd- Đây là mật khẩu cho cơ sở dữ liệu của bạn.
  3. Truyền Truy vấn của bạn trong một đối tượng lệnh
  4. Tạo một con trỏ để thực hiện Truy vấn.  
  5. Đóng kết nối [tùy chọn]

Bây giờ, hãy mở Visual Studio. Tạo một Dự án mới, sau đó chuyển đến Mẫu Python như sau

 

Bây giờ, hãy chuyển đến Môi trường Python. Kiểm tra Pipiodbc trong Môi trường Python, như sau. Cài đặt hoặc cập nhật nó.

Bây giờ, hãy mở ứng dụng Python và viết đoạn mã sau.

  1. nhập pypyodbc
  2. kết nối = pypyodbc. connect['Trình điều khiển={Máy chủ SQL};Máy chủ=Debendra;Cơ sở dữ liệu=CodeX;uid=sa;pwd=123']
  3. print["Đã kết nối. "]
  4. sự liên quan. đóng lại[]

Bây giờ, tôi có cơ sở dữ liệu codex. Ở đây, tôi có tbl_employee.  

Bây giờ mình sẽ viết code để nhập dữ liệu từ người dùng và lưu dữ liệu vào cơ sở dữ liệu như sau

Giả sử bạn đã lấy một thứ gì đó từ web hoặc bạn có một tập dữ liệu mà bạn đã lập mô hình bằng Python và bây giờ bạn muốn lưu trữ nó ở đâu đó. Gì?

Dưới đây là các bước về cách chèn dữ liệu từ Python vào SQL Server. Nếu bạn muốn biết cách làm việc theo cách khác [từ máy chủ SQL sang Python [Pandas DataFrame], hãy xem bài đăng này

Các bước thực hiện như sau

  • Kết nối với máy chủ SQL

  • Tạo Khung dữ liệu Pandas [hư cấu] [df]

  • Nhập dữ liệu từ df vào bảng trong SQL Server

Trong ví dụ này, tôi lấy một bảng hiện có từ SQL Server, tải nó vào DataFrame và đặt lại ngay khi nó đến từ. Vâng, điều này có nghĩa là các bản ghi trùng lặp [lặp đi lặp lại], nhưng bạn hiểu rõ

Gần đây tôi đã cố gắng tải các bộ dữ liệu lớn vào cơ sở dữ liệu SQL Server bằng Python. Thông thường, để tăng tốc độ chèn với pyodbc, tôi có xu hướng sử dụng tính năng cursor.fast_executemany = True để tăng tốc độ chèn đáng kể. Tuy nhiên, hôm nay tôi gặp phải một lỗi kỳ lạ và bắt đầu tìm hiểu sâu hơn về cách thức hoạt động của fast_executemany

Lược đồ khung dữ liệu và bảng SQL Server của tôi

Khi tôi đang cố tải dữ liệu của mình vào SQL Server, tôi gặp lỗi. “Lỗi khi chuyển đổi kiểu dữ liệu varchar thành số. ”

Lỗi này cực kỳ khó hiểu đối với tôi vì các loại dữ liệu trong khung dữ liệu Pandas của tôi hoàn toàn khớp với các loại được xác định trong bảng SQL Server. Cụ thể, dữ liệu mà tôi đang cố tải là một chuỗi thời gian có dấu thời gian và các cột đo lường + một số cột siêu dữ liệu

My dataframe schema:
summertime bool
time datetime64[ns]
unique_id object
measurement float64
entered datetime64[ns]
updated datetime64[ns]

Bảng SQL Server có một lược đồ tương tự như thế này

Lược đồ của bảng máy chủ SQL

Nếu bạn nhìn vào các loại dữ liệu, chúng hoàn toàn khớp với nhau

"Lỗi khi chuyển đổi kiểu dữ liệu varchar thành số"

Để tải nhanh dữ liệu này vào cơ sở dữ liệu SQL Server, tôi đã chuyển đổi khung dữ liệu Pandas thành danh sách các danh sách bằng cách sử dụng

ProgrammingError: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server] Error converting data type varchar to numeric. [SQLExecute]
0. Để nhập dữ liệu của tôi vào phiên bản cơ sở dữ liệu, tôi đã tạo

  • đối tượng kết nối với phiên bản cơ sở dữ liệu SQL Server
  • đối tượng con trỏ [từ đối tượng kết nối]
  • và câu lệnh
    ProgrammingError: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server] Error converting data type varchar to numeric. [SQLExecute]
    1

Lưu ý rằng trên dòng 14, chúng tôi sử dụng tính năng cursor.fast_executemany = True. Việc thực thi tập lệnh đã gây ra lỗi sau cho tôi [với phiên bản.

ProgrammingError: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server] Error converting data type varchar to numeric. [SQLExecute]
3]

ProgrammingError: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server] Error converting data type varchar to numeric. [SQLExecute]

Tại sao

ProgrammingError: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server] Error converting data type varchar to numeric. [SQLExecute]
4 lại cố gắng chuyển đổi thứ gì đó từ
ProgrammingError: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server] Error converting data type varchar to numeric. [SQLExecute]
0 thành
ProgrammingError: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server] Error converting data type varchar to numeric. [SQLExecute]
1?. Khi tôi nhận xét dòng 14 để sử dụng
ProgrammingError: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server] Error converting data type varchar to numeric. [SQLExecute]
2 mà không có tính năng fast_executemany, tập lệnh vẫn hoạt động tốt. Tôi đã có thể chèn dữ liệu của mình mà không gặp bất kỳ sự cố nào

Vấn đề duy nhất là không có fast_executemany, nó chậm

Tìm hiểu sâu hơn về “
ProgrammingError: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server] Error converting data type varchar to numeric. [SQLExecute]
5

Theo Pyodbc Wiki [1]

fast_executemany có thể nâng cao hiệu suất của các hoạt động của

ProgrammingError: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server] Error converting data type varchar to numeric. [SQLExecute]
7 bằng cách giảm đáng kể số lần quay lại máy chủ

Đây là lý do chính tại sao tôi muốn sửa lỗi này. Theo sự cố Github từ kho lưu trữ pyodbc [2], nội bộ pyodbc chuyển tất cả các giá trị thập phân dưới dạng chuỗi do một số khác biệt và lỗi liên quan đến dấu thập phân được sử dụng bởi các trình điều khiển cơ sở dữ liệu khác nhau. Điều này có nghĩa là khi dữ liệu của tôi có giá trị pyodbc0 hoặc pyodbc1, cả hai giá trị đó có thể không được chấp nhận vì loại dữ liệu SQL Server của tôi được chỉ định là pyodbc2. Ngoài ra, pyodbc cần chuỗi thay vì số float, vì vậy giá trị đúng sẽ là pyodbc4 i. e. một chuỗi [không float. ] với đúng ba số sau dấu phẩy

Vì vậy, giải pháp của tôi đã rút gọn để thêm dòng này

Dòng này chỉ chuyển đổi số float thành chuỗi biểu thị các số có chính xác ba dấu thập phân

Giải pháp “lạ” giúp tôi sử dụng “fast_executemany” với float Lợi ích của việc sửa lỗi “fast_executemany”

Sau khi khắc phục sự cố, tập lệnh chạy nhanh hơn 100 lần so với chạy mà không có dòng 14 [cursor.fast_executemany = True]. Lưu ý rằng nó rất nhanh vì nó tải toàn bộ dữ liệu vào bộ nhớ trước khi tải nó vào SQL Server, vì vậy hãy cân nhắc việc tải theo khối nếu bạn gặp lỗi hết bộ nhớ

Phần kết luận

Tóm lại, tôi đã có thể sửa lỗi "Lỗi chuyển đổi kiểu dữ liệu varchar thành số" bằng cách chuyển đổi cột float của tôi thành chuỗi có cùng số dấu thập phân như được xác định trong bảng SQL Server. Tôi khá ngạc nhiên là pyodbc không xử lý vấn đề đó bên trong [hoặc có thể nó đã được sửa trong các phiên bản Pyodbc gần đây hơn?]

Làm cách nào để chèn dữ liệu vào SQL Server từ Python?

Các bước để chèn giá trị vào bảng SQL Server bằng Python .
Bước 1. Cài đặt gói Pyodbc. .
Bước 2. Kết nối Python với máy chủ SQL. .
Bước 3. Chèn các giá trị vào bảng SQL Server bằng Python. .
Bước 4. Xác minh kết quả

Làm cách nào để chèn dữ liệu hàng loạt vào SQL Server bằng Python?

Dưới đây, chúng tôi giải thích một cách phân tích từng bước. .
Bước 1. Lắp ráp lệnh SQL CREATE TABLE. .
Bước 2. Thực thi lệnh CREATE TABLE bằng con trỏ trong Python. .
Bước 3. Lắp ráp lệnh BULK INSERT cho tệp được nhập. .
Bước 4. Thực thi lệnh BULK INSERT bằng con trỏ

Làm cách nào chúng tôi có thể chèn dữ liệu vào SQL Server?

Trong Object Explorer, kết nối với một phiên bản của Công cụ cơ sở dữ liệu máy chủ SQL và sau đó mở rộng phiên bản đó. Mở rộng Cơ sở dữ liệu, bấm chuột phải vào cơ sở dữ liệu để thêm tệp, rồi bấm Thuộc tính. Trong hộp thoại Thuộc tính cơ sở dữ liệu, chọn trang Tệp. Để thêm tệp nhật ký dữ liệu hoặc giao dịch, hãy nhấp vào Thêm

Làm cách nào để chèn danh sách vào bảng SQL Python?

Chèn một hàng vào bảng MySQL từ Python .
Kết nối với MySQL từ Python. .
Xác định truy vấn Chèn SQL. .
Nhận đối tượng con trỏ từ kết nối. .
Thực hiện truy vấn chèn bằng phương thức exec[]. .
Cam kết thay đổi của bạn. .
Nhận số hàng bị ảnh hưởng. .
Xác minh kết quả bằng truy vấn SQL SELECT

Chủ Đề