PostgreSQL là một trong những cơ sở dữ liệu nguồn mở phổ biến nhất. Nếu bạn đang xây dựng một ứng dụng web, bạn cần một cơ sở dữ liệu. Cộng đồng Python thích PostgreSQL cũng như cộng đồng PHP thích MySQL. Để "nói chuyện" với cơ sở dữ liệu PostgreSQL, các pythonistas thường sử dụng thư viện psycopg2. Nó được viết bằng ngôn ngữ lập trình C sử dụng libpq. Hãy đi sâu vào nó
Cài đặt
pip install psycopg2
Nếu bạn cài đặt psycopg2, bạn phải có thêm tệp nguồn và trình biên dịch [gcc]
- libpq
- libssl
Nhưng bạn có thể cài đặt nhị phân biên dịch sẵn, trong trường hợp này bạn cần thực thi
pip install psycopg2-binary
Bắt đầu
Để truy vấn cơ sở dữ liệu trước tiên chúng ta cần kết nối với nó và lấy một con trỏ
import psycopg2
conn = psycopg2.connect[dbname='database', user='db_user',
password='mypassword', host='localhost']
cursor = conn.cursor[]
Bây giờ bạn phải sử dụng
pip install psycopg2-binary
1 để thực hiện các truy vấncursor.execute['SELECT * FROM airport LIMIT 10']
records = cursor.fetchall[]
...
cursor.close[]
conn.close[]
Khi truy vấn được gửi, bạn có thể nhận kết quả bằng các phương pháp sau
2 — trả về một hàngpip install psycopg2-binary
3 — trả về một danh sách các hàngpip install psycopg2-binary
4 — trả về số lượng hàng đã cung cấppip install psycopg2-binary
Con trỏ là một đối tượng có thể lặp lại, vì vậy bạn có thể sử dụng vòng lặp for
________số 8_______Nếu bạn muốn làm theo các phương pháp hay nhất, bạn cần đóng con trỏ và kết nối. Hãy làm điều đó theo cách Pythonic bằng trình quản lý ngữ cảnh
from contextlib import closing
with closing[psycopg2.connect[...]] as conn:
with conn.cursor[] as cursor:
cursor.execute['SELECT * FROM airport LIMIT 5']
for row in cursor:
print[row]
Theo mặc định khi bạn lặp qua một con trỏ [hoặc sử dụng các phương pháp đã đề cập ở trên], bạn sẽ nhận được một bộ, mỗi cột tương ứng với chỉ mục của nó. Nếu bạn muốn lấy giá trị theo tên cột, bạn có thể sử dụng
pip install psycopg2-binary
5 hoặc pip install psycopg2-binary
6from psycopg2.extras import DictCursor
with psycopg2.connect[...] as conn:
with conn.cursor[cursor_factory=DictCursor] as cursor:
...
Xây dựng truy vấn động
Bạn có biết rằng bạn có thể tạo truy vấn bằng psycopg2 không?
cursor.execute['SELECT * FROM airport WHERE city_code = %s', ['ALA', ]]
for row in cursor:
print[row]
Bạn nên ghi nhớ các quy tắc sau khi làm việc với trình giữ chỗ
- Trình giữ chỗ phải là
7 cho tất cả các loại dữ liệupip install psycopg2-binary
- Không sử dụng dấu nháy đơn cho giá trị chuỗi
- Nếu bạn cần sử dụng ký tự
8, bạn phải viết nó làpip install psycopg2-binary
9pip install psycopg2-binary
Bạn cũng có thể sử dụng các đối số được đặt tên
cursor.execute[
'SELECT * FROM engine_airport WHERE city_code = %[city_code]s',
{'city_code': 'ALA'}
]
Ngoài ra psycopg2 cung cấp mô-đun có tên là
import psycopg2
conn = psycopg2.connect[dbname='database', user='db_user',
password='mypassword', host='localhost']
cursor = conn.cursor[]
0 có thể được sử dụng để tạo một truy vấn SQL một cách an toàn. Nó được giới thiệu trong phiên bản import psycopg2
conn = psycopg2.connect[dbname='database', user='db_user',
password='mypassword', host='localhost']
cursor = conn.cursor[]
1from psycopg2 import sql
...
>>> with conn.cursor[] as cursor:
columns = ['country_name_ru', 'airport_name_ru', 'city_code']
stmt = sql.SQL['SELECT {} FROM {} LIMIT 5'].format[
sql.SQL[','].join[map[sql.Identifier, columns]],
sql.Identifier['airport']
]
cursor.execute[stmt]
for row in cursor:
print[row]
giao dịch
Theo mặc định, tất cả các hướng dẫn được thực hiện bên trong một giao dịch khi mã rời khỏi trình quản lý bối cảnh [
import psycopg2
conn = psycopg2.connect[dbname='database', user='db_user',
password='mypassword', host='localhost']
cursor = conn.cursor[]
2] hoặc được cam kết rõ ràng bằng cách gọi phương thức import psycopg2
conn = psycopg2.connect[dbname='database', user='db_user',
password='mypassword', host='localhost']
cursor = conn.cursor[]
3. Nếu một ngoại lệ được đưa ra bên trong trình quản lý ngữ cảnh, psycopg2 sẽ thực hiện quay lui để hoàn nguyên các thay đổi. Bạn có thể thay đổi hành vi này bằng cách đặt thuộc tính import psycopg2
conn = psycopg2.connect[dbname='database', user='db_user',
password='mypassword', host='localhost']
cursor = conn.cursor[]
4 thành import psycopg2
conn = psycopg2.connect[dbname='database', user='db_user',
password='mypassword', host='localhost']
cursor = conn.cursor[]
5. Trong trường hợp này, mọi cuộc gọi import psycopg2
conn = psycopg2.connect[dbname='database', user='db_user',
password='mypassword', host='localhost']
cursor = conn.cursor[]
6 sẽ có hiệu lực ngay lập tức trên cơ sở dữ liệu. Vui lòng lưu ý các giao dịch chạy dài do tác động xấu đến hiệu suất cơ sở dữ liệu