Làm cách nào để bạn kết nối với cơ sở dữ liệu trong python?

Với Python, chúng ta có thể tự động viết và thực thi SQL. Nhưng để điều này hoạt động, chúng ta cần Python để có thể giao tiếp với cơ sở dữ liệu. Trong bài viết này, chúng tôi sẽ tập trung vào việc sử dụng gói có tên là

import pyodbc

driver: str = 'ODBC Driver 17 for SQL Server'
username = os.environ.get["SQLSERVER_USER"]
password = os.environ.get["SQLSERVER_PASS"]
host = os.environ.get["SQLSERVER_HOST"]
port = os.environ.get["SQLSERVER_PORT"]
database = os.environ.get["SQLSERVER_DB"]
1 để giao tiếp với cơ sở dữ liệu quan hệ bằng giao thức ODBC. Sau khi đọc bài viết này, bạn sẽ có thể viết và thực thi SQL trong ứng dụng Python của mình. Hãy viết mã

Trước khi chúng tôi bắt đầu

Hãy xác định phạm vi của bài viết này

Người dùng Postgres?

Có nhiều cơ sở dữ liệu tương thích với ODBC và pyodbc và trong bài viết này, chúng tôi sẽ sử dụng MS SQL. Nếu bạn đang sử dụng PostgreSQL thì hãy xem bài viết dưới đây để có cách tiếp cận tối ưu hơn

Tạo kết nối Python PostgreSQL cho người mới bắt đầu tuyệt đối

Cách tập lệnh Python của bạn có thể giao tiếp với cơ sở dữ liệu Postgres của bạn

mikehul. trung bình. com

Tạo truy vấn SQL

Bài viết này tập trung vào việc tạo kết nối với cơ sở dữ liệu bằng pyodbc. Kết nối này sau đó có thể được sử dụng để thực thi SQL. Một số cơ sở dữ liệu sử dụng cú pháp khác với những cơ sở dữ liệu khác

  • Máy chủ MS SQL
    import pyodbc

    driver: str = 'ODBC Driver 17 for SQL Server'
    username = os.environ.get["SQLSERVER_USER"]
    password = os.environ.get["SQLSERVER_PASS"]
    host = os.environ.get["SQLSERVER_HOST"]
    port = os.environ.get["SQLSERVER_PORT"]
    database = os.environ.get["SQLSERVER_DB"]
    2
  • PostgreSQL
    import pyodbc

    driver: str = 'ODBC Driver 17 for SQL Server'
    username = os.environ.get["SQLSERVER_USER"]
    password = os.environ.get["SQLSERVER_PASS"]
    host = os.environ.get["SQLSERVER_HOST"]
    port = os.environ.get["SQLSERVER_PORT"]
    database = os.environ.get["SQLSERVER_DB"]
    3

Điều này có nghĩa là bạn phải viết các câu lệnh SQL cho một cơ sở dữ liệu cụ thể

Có một cách tiếp cận không liên quan đến cơ sở dữ liệu trong đó bạn xác định truy vấn của mình theo cách Pythonic hơn và sau đó biên dịch nếu cho một cơ sở dữ liệu nhất định. Điều này sẽ tạo SQL cụ thể cho cơ sở dữ liệu đó để bạn không bị ràng buộc với các chi tiết cụ thể của cơ sở dữ liệu mà bạn hiện đang sử dụng. Điều này có nghĩa là nếu bạn quyết định chuyển từ MySQL sang Postgres trong tương lai, bạn sẽ không phải thay đổi mã của mình

Tôi hiện đang viết bài này vì vậy hãy đảm bảo theo dõi tôi

Giới thiệu về pyodbc và giao thức ODBC

Một chút thông tin cơ bản về gói chúng tôi đang sử dụng và cách thức hoạt động của nó. Pyodbc là gói cho phép bạn giao tiếp với cơ sở dữ liệu [quan hệ]. Nó sử dụng giao thức Open DataBase Communication. Giao thức này xác định cách máy khách [như tập lệnh Python của bạn] và cơ sở dữ liệu giao tiếp

Bạn có thể so sánh giao thức truyền thông này với giao thức HTTP tạo điều kiện giao tiếp giữa các máy tính qua internet. khách hàng biết cách yêu cầu tài nguyên, máy chủ biết cách phản hồi và khách hàng biết phản hồi trông như thế nào để họ có thể sử dụng thông tin. Theo cách tương tự, khách hàng có thể sử dụng giao thức ODBC để giao tiếp với cơ sở dữ liệu

Docker cho người mới bắt đầu tuyệt đối. sự khác biệt giữa hình ảnh và vùng chứa

Tìm hiểu sự khác biệt giữa Docker image và container container và image khác nhau + ví dụ code thực tế

hướng tới khoa học dữ liệu. com

Kết nối với cơ sở dữ liệu — phần mã

Có một vài bước đơn giản mà chúng ta sẽ thực hiện. Chúng tôi sẽ cần sử dụng thông tin đăng nhập của mình để tạo chuỗi kết nối. Với chuỗi đó, chúng tôi sẽ tạo kết nối. Trên kết nối, bạn có thể tạo một con trỏ mà chúng tôi sẽ sử dụng để thực hiện các truy vấn. Đầu tiên một số chuẩn bị

chuẩn bị. phụ thuộc

Trước tiên, hãy tạo một môi trường ảo và cài đặt phần phụ thuộc duy nhất của chúng ta

pip install pyodbc

Môi trường ảo dành cho người mới bắt đầu — nó là gì và cách tạo [+ ví dụ]

Đi sâu vào môi trường ảo Python, pip và tránh các phụ thuộc vướng víu

hướng tới khoa học dữ liệu. com

Bước 1. Thu thập thông tin đăng nhập của chúng tôi

Đây là nơi chúng tôi truy xuất thông tin đăng nhập cho cơ sở dữ liệu của mình. Trong ví dụ bên dưới, chúng tôi xử lý thông tin đăng nhập của mình theo cách an toàn nhất có thể. chúng tôi tải chúng từ môi trường để ứng dụng của chúng tôi có quyền truy cập mà không cần mã hóa cứng chúng vào tập lệnh của chúng tôi

import pyodbc

driver: str = 'ODBC Driver 17 for SQL Server'
username = os.environ.get["SQLSERVER_USER"]
password = os.environ.get["SQLSERVER_PASS"]
host = os.environ.get["SQLSERVER_HOST"]
port = os.environ.get["SQLSERVER_PORT"]
database = os.environ.get["SQLSERVER_DB"]

Ngăn mật khẩu của bạn bị rò rỉ bằng cách học cách áp dụng

import pyodbc

driver: str = 'ODBC Driver 17 for SQL Server'
username = os.environ.get["SQLSERVER_USER"]
password = os.environ.get["SQLSERVER_PASS"]
host = os.environ.get["SQLSERVER_HOST"]
port = os.environ.get["SQLSERVER_PORT"]
database = os.environ.get["SQLSERVER_DB"]
4 trong bài viết dưới đây

Giữ an toàn cho mã của bạn bằng cách sử dụng các biến môi trường và tệp env

Tải một cách an toàn tệp chứa tất cả dữ liệu bí mật, bắt buộc của ứng dụng của chúng tôi như mật khẩu, mã thông báo, v.v.

hướng tới khoa học dữ liệu. com

Bước 2. Tạo chuỗi kết nối

Pyodbc cần một chuỗi được định dạng chứa thông tin đăng nhập của chúng tôi để kết nối với cơ sở dữ liệu. Trong ví dụ bên dưới, chúng tôi sử dụng chuỗi f để tạo chuỗi kết nối trong khi vẫn giữ cho mã của chúng tôi sạch sẽ

password = "}}".join[password.split["}"]]

constring = f"DRIVER={driver};" \
f"SERVER={host};" \
f"DATABASE={database};" \
f"UID={username};" \
f"PWD={{{password}}};" \
f"port={port};"

sửa mật khẩu
Có điều gì đó kỳ lạ đang xảy ra với

import pyodbc

driver: str = 'ODBC Driver 17 for SQL Server'
username = os.environ.get["SQLSERVER_USER"]
password = os.environ.get["SQLSERVER_PASS"]
host = os.environ.get["SQLSERVER_HOST"]
port = os.environ.get["SQLSERVER_PORT"]
database = os.environ.get["SQLSERVER_DB"]
5. Đầu tiên, chúng tôi nhân đôi tất cả
import pyodbc

driver: str = 'ODBC Driver 17 for SQL Server'
username = os.environ.get["SQLSERVER_USER"]
password = os.environ.get["SQLSERVER_PASS"]
host = os.environ.get["SQLSERVER_HOST"]
port = os.environ.get["SQLSERVER_PORT"]
database = os.environ.get["SQLSERVER_DB"]
6 dấu ngoặc nhọn trong mật khẩu, sau đó chúng tôi bao quanh nó bằng dấu ngoặc nhọn một lần nữa. Điều này là do mật khẩu có thể chứa một số ký tự lạ như
import pyodbc

driver: str = 'ODBC Driver 17 for SQL Server'
username = os.environ.get["SQLSERVER_USER"]
password = os.environ.get["SQLSERVER_PASS"]
host = os.environ.get["SQLSERVER_HOST"]
port = os.environ.get["SQLSERVER_PORT"]
database = os.environ.get["SQLSERVER_DB"]
7 chẳng hạn. Bao quanh chúng bằng dấu ngoặc nhọn sẽ thoát khỏi tất cả chúng. Chúng tôi không muốn bất kỳ dấu ngoặc nhọn nào là một phần trong mật khẩu của chúng tôi bị thoát, vì vậy chúng tôi nhân đôi chúng để “thoát thoát”

Hơi lạ nhưng đây là cách nó hoạt động rõ ràng. Cũng lưu ý rằng điều này không chỉ hoạt động với mật khẩu mà với bất kỳ đối số nào, vì vậy nếu tên người dùng của bạn chứa các ký tự đặc biệt, bạn cũng có thể sử dụng kỹ thuật này

Chuỗi kết nối thu được trông như thế này [chú ý rằng

import pyodbc

driver: str = 'ODBC Driver 17 for SQL Server'
username = os.environ.get["SQLSERVER_USER"]
password = os.environ.get["SQLSERVER_PASS"]
host = os.environ.get["SQLSERVER_HOST"]
port = os.environ.get["SQLSERVER_PORT"]
database = os.environ.get["SQLSERVER_DB"]
8 hiện đã được dịch chính xác thành
import pyodbc

driver: str = 'ODBC Driver 17 for SQL Server'
username = os.environ.get["SQLSERVER_USER"]
password = os.environ.get["SQLSERVER_PASS"]
host = os.environ.get["SQLSERVER_HOST"]
port = os.environ.get["SQLSERVER_PORT"]
database = os.environ.get["SQLSERVER_DB"]
9]

DRIVER=ODBC Driver 17 for SQL Server;SERVER=my_host;DATABASE=my_database;UID=my_username;PWD={my_}}password};port=my_port;

Bắt đầu với Cython. Cách thực hiện >1. 7 tỷ phép tính mỗi giây trong Python

Kết hợp sự dễ dàng của Python với tốc độ của C

hướng tới khoa học dữ liệu. com

Bước 3. Đang kết nối

Đây là phần dễ dàng, chúng tôi sẽ tạo kết nối [thông thường bạn có một kết nối cho mỗi ứng dụng]. Sau đó, chúng tôi tạo một con trỏ trên kết nối. Một con trỏ được sử dụng để lặp lại một tập hợp kết quả do một truy vấn. Bạn đóng con trỏ khi hoàn thành tập hợp kết quả

cnxn:pyodbc.Connection = pyodbc.connect[constring]cursor:pyodbc.Cursor = cnxn.cursor[]
try:
cursor.execute["SELECT @@VERSION"]
print[cursor.fetchone[]]
except Exception as e:
print[f"Connection could not be established: {e}"]
finally:
cursor.close[]

Tiếp theo, chúng ta có thể sử dụng con trỏ để thực thi một số SQL, trong trường hợp này, chúng ta in ra phiên bản cơ sở dữ liệu SQL Server của mình. Nếu bất cứ điều gì không thành công, chúng tôi in ra lỗi và trong mọi trường hợp, chúng tôi đóng con trỏ của mình

Có một cách ngắn hơn, tốt hơn để làm điều này

with cnxn.cursor[] as cursor:
try:
cursor.execute["SELECT @@VERSION"]
print[cursor.fetchone[]]
except Exception as e:
print[f"Connection could not be established: {e}"]

Sử dụng trình quản lý bối cảnh [phần

password = "}}".join[password.split["}"]]

constring = f"DRIVER={driver};" \
f"SERVER={host};" \
f"DATABASE={database};" \
f"UID={username};" \
f"PWD={{{password}}};" \
f"port={port};"
0] khiến con trỏ tự động đóng. Ngoài ra, nó sẽ cam kết [bạn phải
password = "}}".join[password.split["}"]]

constring = f"DRIVER={driver};" \
f"SERVER={host};" \
f"DATABASE={database};" \
f"UID={username};" \
f"PWD={{{password}}};" \
f"port={port};"
1 phần chèn; xem ví dụ bên dưới] bất kỳ thứ gì bạn thực hiện trong khối
password = "}}".join[password.split["}"]]

constring = f"DRIVER={driver};" \
f"SERVER={host};" \
f"DATABASE={database};" \
f"UID={username};" \
f"PWD={{{password}}};" \
f"port={port};"
2. Nếu phát hiện lỗi, nó sẽ khôi phục tất cả các truy vấn. Lưu ý rằng điều này chỉ hoạt động nếu kết nối được tạo bằng
password = "}}".join[password.split["}"]]

constring = f"DRIVER={driver};" \
f"SERVER={host};" \
f"DATABASE={database};" \
f"UID={username};" \
f"PWD={{{password}}};" \
f"port={port};"
3 [là mặc định]

Hiểu trình quản lý bối cảnh Python cho người mới bắt đầu tuyệt đối

Hiểu câu lệnh VỚI với thanh kiếm ánh sáng

trung bình. com

Thưởng. truy vấn ví dụ

Dưới đây là một số truy vấn ví dụ để giúp bạn bắt đầu

truy vấn 1. Chọn hồ sơ

Sử dụng

password = "}}".join[password.split["}"]]

constring = f"DRIVER={driver};" \
f"SERVER={host};" \
f"DATABASE={database};" \
f"UID={username};" \
f"PWD={{{password}}};" \
f"port={port};"
4 để truy xuất một hàng

with cnxn.cursor[] as cursor:
cursor.execute["SELECT * FROM INFORMATION_SCHEMA.TABLES"]
for row in cursor.fetchall[]:
print[row]

SQL — Hiểu cách các chỉ mục hoạt động bí mật để tăng tốc các truy vấn của bạn

Không còn phải chờ các truy vấn chậm kết thúc

hướng tới khoa học dữ liệu. com

Truy vấn 2. Lựa chọn hồ sơ;

with cnxn.cursor[] as cursor:
cursor.execute["SELECT * FROM INFORMATION_SCHEMA.TABLES"]
colnames = [col[0] for col in cursor.description]
coltypes = [col[1] for col in cursor.description]
for rowvalues in cursor.fetchall[]:
# convert types
rowvalues = [coltypes[i][rowvalues[i]] for i in range[len[coltypes]]]
# make dicts from the colnames and rowvalues
row = dict[zip[colnames, rowvalues]]
print[row]

Truy vấn 3. Chèn thông thường

Bởi vì chúng tôi đang ở trong khối quản lý ngữ cảnh [_______6_______0], việc thực thi sẽ được thực hiện nếu không có lỗi xảy ra. Con trỏ cũng tự động đóng

with cnxn.cursor[] as cursor:
cursor.execute["INSERT INTO med.mytable [name, age] VALUES [?,?]", "mike", 32]

SQL — chèn, xóa và cập nhật trong MỘT câu lệnh. đồng bộ hóa các bảng của bạn với MERGE

hướng tới khoa học dữ liệu. com

Truy vấn 4. Lùi một phụ trang

Hai cái đầu tiên được chèn, sau đó #3 không thành công nên #1 và #2 được khôi phục lại. Sẽ không có dấu vết của ông. a, b hoặc c trong cơ sở dữ liệu

with cnxn.cursor[] as cursor:
cursor.execute["INSERT INTO med.mytable [name, age] VALUES [?,?]", "mr. a", 44]
cursor.execute["INSERT INTO med.mytable [name, age] VALUES [?,?]", "mr. b", 33]
cursor.execute["INSERT INTO med.mytable [name, age] VALUES [?,?]", "mr. c", 55, "toomany"]

SQL — Tìm hiểu cách khôi phục truy vấn trong giao dịch

Thực hiện tất cả các truy vấn hoặc không có truy vấn nào

hướng tới khoa học dữ liệu. com

Truy vấn 5. Chèn siêu nhanh

Các phần chèn ở trên sẽ chèn một hàng tại một thời điểm. Với tùy chọn bên dưới, chúng tôi có thể tạo một câu lệnh cho nhiều hàng, giúp cải thiện đáng kể tốc độ chèn

import pyodbc

driver: str = 'ODBC Driver 17 for SQL Server'
username = os.environ.get["SQLSERVER_USER"]
password = os.environ.get["SQLSERVER_PASS"]
host = os.environ.get["SQLSERVER_HOST"]
port = os.environ.get["SQLSERVER_PORT"]
database = os.environ.get["SQLSERVER_DB"]
0

Đọc thêm trong bài viết dưới đây để tìm hiểu về hoạt động bên trong của

password = "}}".join[password.split["}"]]

constring = f"DRIVER={driver};" \
f"SERVER={host};" \
f"DATABASE={database};" \
f"UID={username};" \
f"PWD={{{password}}};" \
f"port={port};"
6

Cải thiện đáng kể tốc độ chèn cơ sở dữ liệu của bạn bằng một bản nâng cấp đơn giản

4 cấp độ tạo kết nối cơ sở dữ liệu cực nhanh trong Python

hướng tới khoa học dữ liệu. com

Quan trọng

Luôn đảm bảo xóa sạch các biến bạn đưa vào câu lệnh SQL của mình để ngăn chặn các cuộc tấn công SQL injection, đặc biệt nếu bạn cho phép người dùng nhập vào câu lệnh của mình. Điều này được giải thích rất hay bởi truyện tranh XKCD nổi tiếng này

Bước tiếp theo

Bây giờ tập lệnh của bạn có thể kết nối với cơ sở dữ liệu, bạn có thể bắt đầu viết SQL. Bạn có thể tạo một API trong 5 dòng mã chẳng hạn. Bằng cách này, bạn có thể cấp cho người dùng quyền truy cập có kiểm soát vào cơ sở dữ liệu của mình, xác định thông tin nào người dùng có thể yêu cầu

Đảm bảo kiểm tra liên kết này để có cái nhìn tổng quan về nhiều truy vấn hữu ích. Cuối cùng, bài viết dưới đây hướng dẫn chi tiết cách triển khai di chuyển cơ sở dữ liệu. Những điều này làm cho nó có thể lập trình thiết kế và kiểm soát phiên bản cơ sở dữ liệu của bạn

Kiểm tra và áp dụng các thay đổi một cách an toàn cho cơ sở dữ liệu của bạn. bắt đầu với Alembic

Phiên bản kiểm soát cơ sở dữ liệu của bạn bằng công cụ Python đơn giản này

hướng tới khoa học dữ liệu. com

Phần kết luận

Tôi hy vọng đã làm sáng tỏ cách kết nối với cơ sở dữ liệu của bạn bằng pyodbc và sử dụng nó để thực thi một số SQL. Tôi hy vọng mọi thứ đều rõ ràng như tôi hy vọng nhưng nếu đây không phải là trường hợp, vui lòng cho tôi biết tôi có thể làm gì để làm rõ thêm. Trong thời gian chờ đợi, hãy xem các bài viết khác của tôi về tất cả các loại chủ đề liên quan đến lập trình như thế này

Làm cách nào để truy cập cơ sở dữ liệu SQL trong Python?

Các bước kết nối Python với SQL Server bằng pyodbc .
Bước 1. Cài đặt pyodbc. Để bắt đầu, hãy cài đặt gói pyodbc sẽ được sử dụng để kết nối Python với SQL Server. .
Bước 2. Lấy tên máy chủ. Tiếp theo, truy xuất tên máy chủ của bạn. .
Bước 3. Kết nối Python với máy chủ SQL

Làm cách nào để kết nối với cơ sở dữ liệu MySQL bằng Python?

Cách ORM .
Sử dụng phương thức connect[] của mysql connector python để kết nối với MySQL. truyền đối số cần thiết cho phương thức connect[]. Tôi. e. Máy chủ, tên người dùng, mật khẩu và tên cơ sở dữ liệu
Tạo đối tượng con trỏ từ đối tượng kết nối được trả về bởi phương thức connect[] để thực hiện các truy vấn SQL
đóng kết nối sau khi công việc của bạn hoàn thành

Python kết nối với cơ sở dữ liệu bên ngoài như thế nào?

Chương 1. .
Bước 1. Tạo cơ sở dữ liệu bên ngoài. Đối với hướng dẫn này, chúng tôi sẽ sử dụng cơ sở dữ liệu Postgres thử nghiệm do nhóm Anvil lưu trữ. .
Bước 2. Cài đặt psycopg2. Thư viện Python để kết nối với Postgres là psycopg2. .
Bước 3. Truy vấn cơ sở dữ liệu của bạn từ Python

Mô-đun Python nào được sử dụng để kết nối với cơ sở dữ liệu?

SQLite có lẽ là cơ sở dữ liệu đơn giản nhất để kết nối với ứng dụng Python vì bạn không cần cài đặt bất kỳ mô-đun Python SQL bên ngoài nào để làm như vậy. Theo mặc định, bản cài đặt Python của bạn chứa thư viện Python SQL có tên sqlite3 mà bạn có thể sử dụng để tương tác với cơ sở dữ liệu SQLite.

Chủ Đề