SQLAlchemy là một công cụ SQL được xây dựng bằng Python cung cấp cho các nhà phát triển vô số tính năng mạnh mẽ để thiết kế và quản lý cơ sở dữ liệu hiệu suất cao.
Chúng ta sẽ khám phá ngắn gọn cách sử dụng SQLAlchemy và sau đó đi sâu hơn vào cách thực thi các câu lệnh SQL thô từ bên trong sự thoải mái của ngôn ngữ miền Python.
Sử dụng SQLAlchemy
Như với tất cả các thư viện Python, hãy bắt đầu bằng cách cài đặt SQLAlchemy. Sau khi cài đặt, chúng ta có thể bắt đầu niềm vui bằng Python.
Tiếp theo, nhập sqlalchemy
chính nó, sau đó nhập một vài mô-đun để chúng tôi có thể dễ dàng truy cập công cụ cơ sở dữ liệu SQLAlchemy:
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey
from sqlalchemy import inspect
Ngoài create_engine
, chúng tôi cũng đang nhập một số mô-đun bổ sung mà chúng tôi sẽ cần để tạo bảng mới. Trước khi chúng ta làm điều đó, hãy đảm bảo SQLAlchemy đã được cài đặt, nhập và đang hoạt động bằng cách gọi .__version__
như vậy:
print sqlalchemy.__version__
Out[*]: 1.0.9
Tạo bảng
Chúng tôi sẽ sử dụng chức năng cơ bản của SQLAlchemy là Ngôn ngữ biểu thức SQL để tạo một số metadata
sẽ chứa một số mô-đun (hoặc đối tượng) có liên quan xác định book
mới của chúng tôi bảng cơ sở dữ liệu:
metadata = MetaData()
books = Table('book', metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('primary_author', String),
)
engine = create_engine('sqlite:///bookstore.db')
metadata.create_all(engine)
Ở trên cùng, chúng tôi xác định metadata
, sau đó chúng tôi chuyển nó vào Table()
, nơi chúng tôi đặt tên cho bảng của mình là book
. Trong phần này, chúng tôi xác định từng cột, cùng với các thuộc tính quan trọng như kiểu dữ liệu và primary_key
.
Sau khi (các) bảng của chúng tôi được xác định và liên kết với metadata
của chúng tôi đối tượng, chúng ta cần tạo một công cụ cơ sở dữ liệu mà chúng ta có thể kết nối với nó. Điều này được thực hiện bằng cách sử dụng create_engine
chức năng.
engine = create_engine('sqlite:///bookstore.db')
Đối với ví dụ của chúng tôi, chúng tôi sẽ sử dụng một SQLite
đơn giản cơ sở dữ liệu. Bạn cũng có thể sử dụng chuỗi kết nối cho các công cụ khác như MySQL hoặc PostgreSQL. Dưới đây là một cú pháp ví dụ để tạo một công cụ cho PostgreSQL:
engine = create_engine('postgresql://user:password@host/database')
Với engine đã tạo, bây giờ chúng ta cần sử dụng .create_all()
phương thức của metadata
của chúng tôi đối tượng và chuyển engine
kết nối với nó, điều này sẽ tự động khiến SQLAlchemy tạo bảng của chúng tôi cho chúng tôi, như đã thấy ở trên.
Sau khi hoàn thành, chúng ta có thể sử dụng bảng khi chúng ta thấy phù hợp. Trong ví dụ đơn giản này, chúng tôi sẽ chỉ sử dụng inspect
mô-đun để xem các cột và xác minh bảng của chúng tôi đã được tạo thành công:
inspector = inspect(engine)
inspector.get_columns('book')
Out[*]:
[{'autoincrement': True,
'default': None,
'name': u'id',
'nullable': False,
'primary_key': 1,
'type': INTEGER()},
{'autoincrement': True,
'default': None,
'name': u'title',
'nullable': True,
'primary_key': 0,
'type': VARCHAR()},
{'autoincrement': True,
'default': None,
'name': u'primary_author',
'nullable': True,
'primary_key': 0,
'type': VARCHAR()}]
Chắc chắn rồi, sử dụng .get_columns()
phương pháp cho book
của chúng tôi bảng, chúng tôi thấy ba cột của chúng tôi đã được tạo.
Thực thi câu lệnh SQL
Với những điều cơ bản đã có, bây giờ chúng ta có thể thử thực thi một số SQL thô bằng cách sử dụng SQLAlchemy.
Sử dụng Mô-đun Văn bản
Một phương pháp để thực thi SQL thô là sử dụng text
mô-đun hoặc Textual SQL
. Cách dễ đọc nhất để sử dụng text
là nhập mô-đun, rồi sau khi kết nối với engine
, xác định text
Chuỗi câu lệnh SQL trước khi sử dụng .execute
để chạy nó:
from sqlalchemy.sql import text
with engine.connect() as con:
data = ( { "id": 1, "title": "The Hobbit", "primary_author": "Tolkien" },
{ "id": 2, "title": "The Silmarillion", "primary_author": "Tolkien" },
)
statement = text("""INSERT INTO book(id, title, primary_author) VALUES(:id, :title, :primary_author)""")
for line in data:
con.execute(statement, **line)
Ở đây, chúng tôi đang chèn hai bản ghi vào cơ sở dữ liệu của mình bằng cách sử dụng text()
-bảng cáo xác định.
Sử dụng phương thức thực thi
Phương pháp thay thế là bỏ qua bằng cách sử dụng text()
và chuyển một chuỗi SQL thô vào .execute()
phương pháp. Ví dụ:ở đây chúng tôi sẽ sử dụng .execute()
để xem các bản ghi mới mà chúng tôi đã chèn ở trên:
with engine.connect() as con:
rs = con.execute('SELECT * FROM book')
for row in rs:
print row
Out[*]:
(4, u'The Hobbit', u'Tolkien')
(5, u'The Silmarillion', u'Tolkien')
Chúng tôi có nó! Các phương pháp đơn giản và hiệu quả để thực thi các câu lệnh SQL thô trong SQLAlchemy.