David Karivandan
Theo
ngày 3 tháng 4
·
2 phút đọc
Tiết kiệm
Các truy vấn Python để hoạt động với nhiều phiên bản của Oracle và SQL Server
Các truy vấn Python hoạt động với nhiều phiên bản của Oracle và SQL Server. Trong thử thách này, tôi phải truy vấn Oracle và SQL Server để hợp nhất các bảng của họ
để tạo một bảng SQL Server mới.
##0 Nhập mô-đun Python bắt buộc
nhập os
nhập gấu trúc dưới dạng pd
nhập pyodbc
import cx_Oracle
import datetime
##1 Thiết lập kết nối Oracle
dsn_tns = cx_Oracle. makedsn[‘xxx. tên miền myoracle. com’, ‘1521’, service_name=’UAT’]
conn_oracleserver = cx_Oracle. connect[user=r’admin’, password=’whate#$@$12*vW’, dsn=dsn_tns]
##2 Thiết lập kết nối máy chủ SQL
conn_sqlserver = pyodbc. kết nối [r'Driver = {Máy chủ SQL}; Máy chủ = máy chủ mysql. miền\test;Trusted_Connection=yes;’]
##3 Con trỏ Oracle & SQL Server
oracle_cursor = conn_oracleserver. con trỏ[]
sqlserver_cursor = conn_sqlserver. con trỏ []
##4 Ví dụ về tham gia các Bảng Oracle
oracle_cursor. thực thi ['CHỌN DISTINCT W3. DEFAULT_FIELD TỪ BẢNG1 W1 INNER THAM GIA BẢNG 2 W2 TRÊN W1. FIELD_ID = W2. FIELD_ID INNER THAM GIA BẢNG3 W3 TRÊN W2. FIELD_ID = W3. FIELD_ID’]
##5 Chèn bản ghi từ Oracle vào SQL Server
cho site_id trong oracle_cursor.
##6 Chèn Dữ liệu Oracle vào bảng tạm thời TEMP_TABLE
sqlserver_cursor. thực thi["CHÈN VÀO [[TEMP_TABLE][FIELD_REF,FIELD2] GIÁ TRỊ [?,?]",[str[Value1],'Dữ liệu chuỗi mẫu']]
sqlserver_cursor. cam kết[]
##7 Hợp nhất và nhóm các bảng
selectdistinct = sqlserver_cursor. thực thi ["CHỌN LĨNH VỰC3, Dcat = STUFF [[CHỌN N', ' + LĨNH VỰC4 TỪ [TEMP_TABLE] AS P2 WHERE P2. FIELD_REF = P1. ĐẶT HÀNG FIELD_REF THEO FIELD5 CHO ĐƯỜNG DẪN XML[N’’], 1, 2, N’’] TỪ [TEMP_TABLE] NHƯ NHÓM P1 THEO FIELD5 ĐẶT HÀNG THEO FIELD_REF;”]
##8 Đóng kết nối
conn_oracleserver. close[]
conn_sqlserver. đóng[]
Hy vọng bạn thấy hướng dẫn này hữu ích trong việc học Python và tích hợp cơ sở dữ liệu
Gần đây tôi đã làm việc rất nhiều với Cơ sở dữ liệu Oracle và Python. Mặc dù Oracle là một công ty lớn, nhưng tôi nhận thấy không có một cộng đồng mạnh như vậy để trợ giúp gói của họ bằng Python để xử lý cơ sở dữ liệu, cx_Oracle và tôi thấy tài liệu của họ không tốt lắm
Vì vậy, tôi quyết định thực hiện bài đăng này theo triết lý của mình là viết những bài mà Thiago [tôi] của 1 tháng trước sẽ phải cảm ơn vì
1. Kết nối với cơ sở dữ liệuĐiều đầu tiên cần làm là kết nối với cơ sở dữ liệu của bạn. Trong trường hợp này, có thể bạn có người dùng và mật khẩu. Ngoài ra, bạn nên có tên nguồn dữ liệu. Với tất cả những thứ trong tay, bạn có thể kết nối với cơ sở dữ liệu
Dễ như ăn bánh
2. Thực thi các lệnh SQLVới cx_Oracle, bạn có thể thực thi bất kỳ lệnh Oracle SQL nào, chọn, chèn, cập nhật, v.v. Để thực hiện các lệnh, bạn phải tạo một con trỏ. Bạn có thể sử dụng cùng một con trỏ để chạy một số lệnh. Tôi chỉ khuyên bạn nên sử dụng kết nối và con trỏ cho từng chức năng trong ứng dụng của mình. Vì vậy, bạn tạo một kết nối và một con trỏ ở đầu hàm của mình và đóng chúng ở cuối
2. 1 Chọn Báo cáoĐiều quan trọng cần đề cập ở đây là [] và các phương thức chỉ hoạt động khi bạn đang thực hiện “chọn”. Sẽ không hợp lý khi sử dụng các phương thức đó khi thực hiện câu lệnh chèn hoặc cập nhật. Ngoài ra, điều quan trọng cần lưu ý là, nếu truy vấn của bạn thực sự lớn, có thể rất chậm vì nó tải dữ liệu được truy vấn vào bộ nhớ
2. 2 câu lệnh ChènNếu bạn muốn chèn dữ liệu từ máy của mình vào bảng trong cơ sở dữ liệu, hãy làm theo quy trình tương tự
Ngoài ra, nếu bạn muốn chèn nhiều hàng, thay vì chạy nhiều lần, tốt hơn nên sử dụng []
Mã này chỉ yêu cầu một lần từ máy khách đến cơ sở dữ liệu thay vì năm chuyến khứ hồi sẽ được yêu cầu cho các lệnh gọi lặp lại tới. Đối với các tập dữ liệu rất lớn, có thể có bộ đệm bên ngoài hoặc giới hạn mạng đối với số lượng hàng có thể được xử lý, do đó có thể phải gọi lại []. Các giới hạn dựa trên cả số lượng hàng đang được xử lý cũng như “kích thước” của mỗi hàng đang được xử lý. Các cuộc gọi lặp lại tới [] vẫn tốt hơn các cuộc gọi lặp lại tới
Bây giờ, nếu bạn đang chèn kết quả của một câu lệnh select, thì tốt hơn là tạo một câu lệnh đơn lẻ và thực hiện nó sau đó thực thi một câu lệnh select, sau đó chèn bằng. Điều này đặc biệt đúng nếu kết quả từ câu lệnh select lớn
3. Sử dụng tham sốMột tính năng rất quan trọng là có thể sử dụng các tham số trong các lệnh SQL của bạn. cx_Oracle cung cấp một cách đơn giản để làm điều đó
Có nhiều cách khác để truyền tham số cho các lệnh SQL trong cx_Oracle nhưng tôi nghĩ đây là cách tốt nhất, vì vậy tôi sẽ tiếp tục với nó
4. Đa xử lý với cx_OracleKhi tôi làm việc với cx_Oracle, đây chắc chắn là điều khó thực hiện nhất. Trong vấn đề của tôi, tôi muốn thực hiện một số lần chèn vào một số bảng và tôi muốn càng nhanh càng tốt. Ngoài ra, thứ tự chèn không quan trọng, vì vậy nó phù hợp để sử dụng đa xử lý
Điều chính ở đây là tạo kết nối bên trong quy trình. Mỗi công nhân trong nhóm quy trình cần có kết nối riêng mà nó tự thiết lập
Hãy ghi nhớ điều đó, việc sử dụng đa xử lý với cx_Oracle khá dễ dàng
Phần kết luậnTôi thực sự không nghĩ rằng tôi đã thể hiện những thứ phức tạp ở đây. Tôi gặp khó khăn trong việc làm cho ứng dụng của mình hoạt động vì không có nhiều câu hỏi trên Stackoverflow về cx_Oracle và tôi không nghĩ tài liệu cx_Oracle là tài liệu tốt nhất hiện có