Python là một ngôn ngữ mạnh mẽ cho phép bạn thậm chí kết nối với cơ sở dữ liệu và chạy các truy vấn SQL. Thông thường, bạn có thể cần tìm nạp dữ liệu từ cơ sở dữ liệu từ bên trong ứng dụng hoặc trang web python của mình. Python cung cấp nhiều thư viện hữu ích cho mục đích này. Trong bài viết này, chúng ta sẽ xem xét cách kết nối với cơ sở dữ liệu bằng python và cũng tạo tập lệnh python để chạy truy vấn SQL đối với cơ sở dữ liệu của bạn
Tập lệnh Python để chạy truy vấn SQL
Dưới đây là các bước để chạy truy vấn SQL trong python
1. Cài đặt thư viện cơ sở dữ liệu Python
Trước tiên, bạn cần cài đặt đúng thư viện python, tùy thuộc vào loại cơ sở dữ liệu của bạn, để truy vấn cơ sở dữ liệu của bạn. Nếu bạn sử dụng cơ sở dữ liệu MySQL, hãy cài đặt gói MySQLdb. Nếu bạn sử dụng PostgreSQL, hãy cài đặt psycopg2 hoặc pygresql
Mở terminal và chạy các lệnh sau, tùy thuộc vào loại cơ sở dữ liệu của bạn
mysql
pip install MySQL-python pip install MySQL-python-connector
PostgreSQL
pip install psycopg2 pip install pygresql
2. Tạo tập lệnh Python
Mở terminal và chạy lệnh sau để tạo tập lệnh python trống
$ sudo vi db_query.py
Thêm dòng sau vào nó để đặt môi trường thực thi
#!/usr/bin/env python
3. Nhập thư viện
Tùy thuộc vào Cơ sở dữ liệu của bạn, hãy thêm dòng sau để nhập thư viện thích hợp vào tập lệnh python của bạn
mysql
import MySQLdb as db_connect
PostgreSQL
import psycopg2 as db_connect
4. Kết nối với cơ sở dữ liệu của bạn
Tiếp theo, thêm các dòng sau để kết nối với cơ sở dữ liệu của bạn. Thay thế các giá trị của host_name, db_user, db_password và db_name bằng địa chỉ máy chủ, tên người dùng, mật khẩu và tên cơ sở dữ liệu của cơ sở dữ liệu của bạn tương ứng. Chúng tôi sử dụng phương thức connect[] để thiết lập kết nối cơ sở dữ liệu và chuyển thông tin đăng nhập của người dùng cơ sở dữ liệu làm đối số
host_name="localhost" db_user="test_user" db_password="123" db_name="project connection = db_connect.connect[host=host_name,user=db_user,password=db_password,database=db_name] cursor = connection.cursor[]
Các dòng trên sẽ kết nối với cơ sở dữ liệu của bạn và trả về một đối tượng kết nối có thể được sử dụng để kết nối với cơ sở dữ liệu. Nó cũng cung cấp một đối tượng con trỏ được sử dụng để gửi truy vấn, tìm nạp kết quả và duyệt qua nó
5. cơ sở dữ liệu truy vấn
Tiếp theo, viết truy vấn SQL của bạn
query = "select * from data limit 5"
Tiếp theo, chúng ta sử dụng đối tượng con trỏ để thực hiện truy vấn, sử dụng lệnh exec
________số 8_______Lệnh trên sẽ chạy truy vấn SQL của bạn và lấy kết quả của nó. Chúng tôi sử dụng chức năng tìm nạp [] để lấy tất cả các hàng dữ liệu. Bạn thậm chí có thể sử dụng tìm nạp [] để nhận một hàng tại một thời điểm. Bạn có thể in kết quả bằng lệnh in hoặc lặp qua nó và thực hiện thêm thao tác dữ liệu
6. Đóng kết nối
Cuối cùng, khi bạn đã hoàn tất, điều quan trọng là phải đóng kết nối để nó không khiến máy chủ cơ sở dữ liệu cơ sở dữ liệu của bạn bận rộn
connection.close[]
lưu và đóng tập tin. Đây là toàn bộ mã để bạn tham khảo
pip install psycopg2 pip install pygresql0
Làm cho tệp có thể thực thi được bằng lệnh sau
pip install psycopg2 pip install pygresql1
Bạn có thể chạy tập lệnh bằng lệnh sau
pip install psycopg2 pip install pygresql2
Đó là nó. Trong bài viết này, chúng ta đã học cách kết nối với cơ sở dữ liệu và chạy các truy vấn SQL đối với chúng. Bạn có thể sửa đổi nó theo yêu cầu của bạn. Điều quan trọng là tạo một đối tượng kết nối bằng hàm connect[], sử dụng con trỏ được tạo bằng hàm cursor[] để chạy truy vấn và tìm nạp kết quả. Và cuối cùng đóng kết nối cơ sở dữ liệu
Điều quan trọng cần lưu ý là hầu hết tất cả các thư viện cơ sở dữ liệu đều sử dụng cùng chức năng connect[], cursor[], exec[], fetchall[] để làm việc với cơ sở dữ liệu. Vì vậy, bạn có thể sử dụng đoạn mã trên để truy vấn hầu hết mọi cơ sở dữ liệu quan hệ, chỉ bằng cách thay đổi câu lệnh nhập ở đầu. tập tin py
Để chỉ chọn một số cột trong bảng, hãy sử dụng câu lệnh "SELECT" theo sau là [các] tên cột
Thí dụ
Chỉ chọn các cột tên và địa chỉ
nhập mysql. kết nối
mydb = mysql. tư nối. kết nối[
máy chủ lưu trữ = "máy chủ cục bộ",
người dùng = "tên người dùng của bạn",
mật khẩu = "mật khẩu của bạn",
cơ sở dữ liệu = "cơ sở dữ liệu của tôi"
]
con trỏ = mydb. con trỏ[]
con trỏ. exec["CHỌN tên, địa chỉ TỪ khách hàng"]
kết quả của tôi = con trỏ của tôi. tìm nạp []
cho x trong kết quả của tôi
in[x]
Học cách lọc dữ liệu bằng Python như một nhà phân tích dữ liệu
Thử tham gia các buổi đào tạo thực hành với hướng dẫn từng bước từ chuyên gia. Hãy thử dự án có hướng dẫn được thực hiện với sự cộng tác của Coursera ngay bây giờ
Tôi biết đây là một câu hỏi cũ, nhưng tôi thường muốn những gì có vẻ như OP muốn. Một thư viện RẤT đơn giản để tạo SQL cơ bản
Các chức năng dưới đây làm điều đó. Bạn cung cấp cho họ tên bảng và từ điển chứa dữ liệu bạn muốn sử dụng và họ trả về truy vấn SQL cho thao tác bạn cần
Các cặp khóa/giá trị đại diện cho tên trường và giá trị trong các hàng của cơ sở dữ liệu
def read[table, **kwargs]:
""" Generates SQL for a SELECT statement matching the kwargs passed. """
sql = list[]
sql.append["SELECT * FROM %s " % table]
if kwargs:
sql.append["WHERE " + " AND ".join["%s = '%s'" % [k, v] for k, v in kwargs.iteritems[]]]
sql.append[";"]
return "".join[sql]
def upsert[table, **kwargs]:
""" update/insert rows into objects table [update if the row already exists]
given the key-value pairs in kwargs """
keys = ["%s" % k for k in kwargs]
values = ["'%s'" % v for v in kwargs.values[]]
sql = list[]
sql.append["INSERT INTO %s [" % table]
sql.append[", ".join[keys]]
sql.append["] VALUES ["]
sql.append[", ".join[values]]
sql.append["] ON DUPLICATE KEY UPDATE "]
sql.append[", ".join["%s = '%s'" % [k, v] for k, v in kwargs.iteritems[]]]
sql.append[";"]
return "".join[sql]
def delete[table, **kwargs]:
""" deletes rows from table where **kwargs match """
sql = list[]
sql.append["DELETE FROM %s " % table]
sql.append["WHERE " + " AND ".join["%s = '%s'" % [k, v] for k, v in kwargs.iteritems[]]]
sql.append[";"]
return "".join[sql]
Bạn sử dụng nó như vậy. Chỉ cần đặt tên bảng và từ điển [hoặc sử dụng tính năng **kwargs của python]
>>> upsert["tbl", LogID=500, LoggedValue=5]
"INSERT INTO tbl [LogID, LoggedValue] VALUES ['500', '5'] ON DUPLICATE KEY UPDATE LogID = '500', LoggedValue = '5';"
>>> read["tbl", **{"username": "morten"}]
"SELECT * FROM tbl WHERE username = 'morten';"
>>> read["tbl", **{"user_type": 1, "user_group": "admin"}]
"SELECT * FROM tbl WHERE user_type = '1' AND user_group = 'admin';"
Nhưng HÃY THẬN TRỌNG CÁC TẤN CÔNG SQL INJECTION
Hãy xem điều gì sẽ xảy ra khi một người dùng ác ý mã của bạn làm điều này
>>> read["tbl", **{"user_group": "admin'; DROP TABLE tbl; --"}]
"SELECT * FROM tbl WHERE user_group = 'admin'; DROP TABLE tbl; --';"
Thật dễ dàng để tạo ORM tạm thời của riêng bạn nhưng bạn chỉ nhận được những gì bạn nhìn thấy -- bạn phải tự thoát đầu vào. ]