Đôi khi chúng tôi sẽ muốn tương tác với cơ sở dữ liệu của mình và sử dụng kết quả của nó bằng một ngôn ngữ lập trình cụ thể
Để xây dựng các ứng dụng web hoặc đường dẫn dữ liệu bằng một ngôn ngữ cụ thể như [Ruby, Python, JavaScript, v.v. ]
Đó là nơi DBAPI xuất hiện
Một DB-API
DB-API cung cấp một tiêu chuẩn cho một ngôn ngữ lập trình [như python] để giao tiếp với máy chủ cơ sở dữ liệu quan hệ
Là một thư viện cấp thấp để viết các câu lệnh SQL kết nối với cơ sở dữ liệu
Còn được gọi là bộ điều hợp cơ sở dữ liệu
Các DBAPI khác nhau tồn tại cho mọi khung máy chủ hoặc ngôn ngữ + hệ thống cơ sở dữ liệu
Bộ điều hợp cơ sở dữ liệu xác định tiêu chuẩn để sử dụng cơ sở dữ liệu [với SQL] và sử dụng kết quả của các truy vấn cơ sở dữ liệu làm dữ liệu đầu vào bằng ngôn ngữ nhất định
-- Biến danh sách các hàng đã chọn [SELECT * from some_table;] thành một mảng các đối tượng trong JavaScript chẳng hạn như bộ điều hợp NodeJS;
Ví dụ trên các ngôn ngữ và khung máy chủ
Đối với Ruby [e. g. cho Sinatra, Ruby on Rails]. trang
Đối với NodeJS. nút-Postgres
Đối với Python [e. g. cho Bình, Django]. psycopg2
Nhận xét hàng đầu [0]
Vương miệnSắp xếp thảo luận
Đặt mua
Người dùng cá nhân đáng tin cậyTạo mẫu
Mẫu cho phép bạn nhanh chóng trả lời Câu hỏi thường gặp hoặc lưu trữ đoạn mã để sử dụng lại
Gửi bản xem trước Bỏ qua
Quy tắc ứng xử • Báo cáo lạm dụng
Bạn có chắc chắn muốn ẩn bình luận này?
API tiêu chuẩn để tương tác với cơ sở dữ liệu quan hệ trong Python được xác định trong PEP 249 Đặc tả API cơ sở dữ liệu Python v2. 0
Các thư viện cơ sở dữ liệu phổ biến nhất là
- SQLite. sqlite3
- tâm linh. psycopg2
- mysql. mysql
- tiên tri. cx_Oracle
- Máy chủ MS SQL. pypyodbc, pyodbc, pymssql
nhập khẩu
Có ba cách phổ biến để nhập thư viện triển khai DB-API
import databasepackage
hoặc
import databasepackage as db
hoặc
from databasepackage import connect
Nói chung, hàm duy nhất được sử dụng trực tiếp trong thư viện là
from databasepackage import connect
4, vì hầu hết các thao tác khác được thực hiện trên các đối tượng được trả về sau khi gọi hàm nàyĐang kết nối
Hai đối tượng cấp cao nhất khi làm việc với DB-API là kết nối và con trỏ. Trước tiên, bạn nhận được kết nối đến cơ sở dữ liệu
conn = db.connect[]
Có một số cách để chỉ định các tham số kết nối cơ sở dữ liệu. Đối với hầu hết các thư viện, các giá trị mặc định cho phương thức kết nối sẽ kết nối với cơ sở dữ liệu được cài đặt cục bộ được định cấu hình mặc định. Một số cơ sở dữ liệu có các tùy chọn riêng, như sqlite3 có tùy chọn cho cơ sở dữ liệu trong bộ nhớ không liên tục
conn = sqlite3.connect[':memory:']
Tiếp theo, bạn có một con trỏ, con trỏ này sẽ được sử dụng để thực hiện các lệnh giao dịch, truy vấn SQL và thao tác dữ liệu
cursor = conn.cursor[]
Cách tốt nhất để sử dụng kết nối và con trỏ là từ bên trong trình xử lý tài nguyên. Hầu hết các thư viện cơ sở dữ liệu đều hỗ trợ xử lý tài nguyên trên kết nối, nhưng chỉ một số ít hỗ trợ nó trên con trỏ. Sử dụng
from databasepackage import connect
5, cả kết nối và con trỏ đều đóng sau khi sử dụng________số 8
Nếu chỉ hỗ trợ xử lý tài nguyên kết nối, thì con trỏ phải được bao bọc trong khối thử/cuối cùng để đảm bảo con trỏ được đóng
with sqlite3.connect[':memory:'] as conn:
curs = conn.cursor[]
try:
pass # SQL commands go here
except Exception as e:
print[e]
finally:
if curs:
curs.close[]
Nếu việc xử lý tài nguyên kết nối không được hỗ trợ, cả hai đều có các phương thức close[] phải được gọi như một phần của khối cuối cùng
import databasepackage as db
0Tất cả các thư viện dành cho cơ sở dữ liệu hỗ trợ giao dịch sẽ tự động bắt đầu một giao dịch mới khi câu lệnh đầu tiên trên con trỏ mới hoặc ngay sau khi gọi tới
from databasepackage import connect
6 trên con trỏ. Tất cả các con trỏ trên kết nối sẽ thực hiện trong giao dịch đó. Nếu sử dụng from databasepackage import connect
5 để xử lý tài nguyên, giao dịch sẽ được cam kết ở cuối khối. Nếu quản lý tài nguyên theo cách thủ công, giao dịch này phải được cam kết rõ ràng trước khi đóng kết nối, nếu không nó sẽ tự động được khôi phục. Rollback và commit được thực hiện với các phương thức cùng tênimport databasepackage as db
3Autocommit cũng có thể được kích hoạt bằng cách thiết lập conn. autocommit = True trong pyscopg2 sau khi tạo kết nối nhưng trước lần thực thi đầu tiên
Xử lý ngoại lệ có thể được thực hiện với lớp
from databasepackage import connect
8 chung hoặc với các lớp cụ thể cho từng thư việnTruy vấn
Một con trỏ chỉ có hai phương thức,
from databasepackage import connect
9 và conn = db.connect[]
0, được sử dụng cho tất cả các truy vấn và DMLimport databasepackage as db
0Đối với các truy vấn liên quan đến tham số, có năm kiểu thay thế được tích hợp trong các phương thức
from databasepackage import connect
9- qmark ‘CHÈN VÀO diễn viên [tên_họ, họ_ngày_sinh] GIÁ TRỊ [?, ?, ?]’
- số CHÈN VÀO diễn viên[first_name, last_name, Birth_date] GIÁ TRỊ [. 1,. 2,. 3]’
- được đặt tên là 'CHÈN VÀO diễn viên [tên_tên, họ_ngày_sinh] GIÁ TRỊ [. họ,. họ,. ngày sinh]'
- định dạng ‘CHÈN VÀO diễn viên[first_name, last_name, Birth_date] GIÁ TRỊ [%s, %s, %s]’
- pyformat 'CHÈN VÀO các diễn viên [tên_họ, họ_tên, ngày_sinh] GIÁ TRỊ [%[first_name]s, %[last_name]s, %[ngày_sinh]s]'
Rất khuyến khích sử dụng một trong các hình thức thay thế này thay vì thực hiện xây dựng hoặc thay thế chuỗi trực tiếp. Sử dụng toán tử định dạng tích hợp sẵn của Python không phải là cách chính xác để thực hiện việc này
Mỗi DB-API chỉ được yêu cầu để hỗ trợ một trong số này, nhưng hầu hết các thư viện đều hỗ trợ nhiều hơn một
- sqlite3. qmark, số và được đặt tên
- nhà ngoại cảm. định dạng, pyformat
- PyMySQL. định dạng
- cx_Oracle. đặt tên
Nếu bạn muốn cho biết ít nhất một trong các kiểu mà thư viện DB-API của bạn hỗ trợ, mỗi thư viện có một biến toàn cục
conn = db.connect[]
2 có giá trị e. g. , sqlite3. kiểu mẫuSử dụng trình giữ chỗ trong câu lệnh, sau đó chuyển một bộ cho tham số vị trí hoặc từ điển cho tham số được đặt tên
qmark
import databasepackage as db
1con số
import databasepackage as db
2đặt tên
import databasepackage as db
3định dạng
import databasepackage as db
4pyformat
import databasepackage as db
5Các cuộc gọi đến
conn = db.connect[]
3 luôn trả về Không có. Không có kết quả nào thực sự được lấy từ cơ sở dữ liệu cho đến khi chúng tôi thực hiện cuộc gọi để tìm nạp chúngChúng tôi sử dụng các phương thức tìm nạp để nhận kết quả của truy vấn
import databasepackage as db
6Các cơ sở dữ liệu khác nhau cũng cung cấp các tiện ích mở rộng độc quyền cho chức năng không được chỉ định trong DB-API. Ví dụ: psycopg làm cho đối tượng
conn = db.connect[]
4 có thể lặp lại, vì vậy bạn có thể lặp lại theo quy mô trên một tập hợp kết quả lớn có tiềm năngimport databasepackage as db
7Cập nhật, Chèn và Xóa
Cập nhật
import databasepackage as db
8Phương thức execmany có liên quan có thể được sử dụng để cung cấp nhiều bộ tham số trong một lệnh gọi
import databasepackage as db
9SQLite sử dụng sqlite3
SQLite được hỗ trợ với mô-đun sqlite3
Cài đặt
Không bắt buộc, vì nó được đóng gói với Python 3
Nhập khẩu
from databasepackage import connect
0Ví dụ
from databasepackage import connect
1PostgreSQL sử dụng psycopg2
PostgreSQL được hỗ trợ với mô-đun psycopg2
Cài đặt
cài đặt pip3 psycopg2
Nhập khẩu
from databasepackage import connect
2Nếu chạy trên Mac OS X, việc nhập này có thể gây ra lỗi cho bạn về việc libssl không phải là phiên bản đủ cao. Để khắc phục điều này, hãy sao chép libssl và libcrypto ra khỏi thư mục cài đặt PostgresSQL của bạn vào /usr/lib
sudo cp /Thư viện/PostgreSQL/9. 2/lib/libssl. 1. 0. 0. dylib /usr/lib sudo cp /Library/PostgreSQL/9. 2/lib/libcrypto. 1. 0. 0. dylib /usr/lib
Và sau đó cập nhật/tạo các liên kết tượng trưng trong/usr/lib
sudo ln -fs/usr/lib/libssl. 1. 0. 0. dylib/usr/lib/libssl. dylib sudo ln -fs /usr/lib/libcrypto. 1. 0. 0. dylib/usr/lib/libcrypto. dylib
Phương thức kết nối hỗ trợ một bộ tham số hoặc chuỗi DSN. Một cách để chỉ định các tham số là tạo chúng trong một từ điển và sau đó hủy cấu trúc từ điển bằng toán tử dấu sao kép
Ví dụ sử dụng cơ sở dữ liệu trống ‘mydb’
from databasepackage import connect
3mysql
Một số thư viện Python cho MySQL chỉ hỗ trợ Python 2. Đây là những thư viện được sử dụng phổ biến nhất hỗ trợ Python 3