Độ bền dữ liệu Python - Hướng dẫn nhanh
Tổng quan về Python - Độ bền dữ liệu
Trong quá trình sử dụng bất kỳ ứng dụng phần mềm nào, người dùng cung cấp một số dữ liệu cần xử lý. Dữ liệu có thể được nhập bằng thiết bị đầu vào tiêu chuẩn (bàn phím) hoặc các thiết bị khác như tệp đĩa, máy quét, máy ảnh, cáp mạng, kết nối WiFi, v.v.
Dữ liệu nhận được như vậy sẽ được lưu trữ trong bộ nhớ chính của máy tính (RAM) dưới dạng cấu trúc dữ liệu khác nhau như, biến và đối tượng cho đến khi ứng dụng đang chạy. Sau đó, nội dung bộ nhớ từ RAM sẽ bị xóa.
Tuy nhiên, thường xuyên hơn không, người ta muốn các giá trị của biến và / hoặc đối tượng được lưu trữ theo cách thức để nó có thể được truy xuất bất cứ khi nào được yêu cầu, thay vì nhập lại cùng một dữ liệu.
Từ 'dai dẳng' có nghĩa là "sự tiếp tục của một tác động sau khi nguyên nhân của nó bị loại bỏ". Thuật ngữ dữ liệu tồn tại lâu dài có nghĩa là nó tiếp tục tồn tại ngay cả khi ứng dụng đã kết thúc. Do đó, dữ liệu được lưu trữ trong một phương tiện lưu trữ không bay hơi chẳng hạn như tệp đĩa là một nơi lưu trữ dữ liệu lâu dài.
Trong hướng dẫn này, chúng ta sẽ khám phá các mô-đun Python bên thứ ba và được tích hợp sẵn khác nhau để lưu trữ và truy xuất dữ liệu đến / từ các định dạng khác nhau như tệp văn bản, tệp CSV, JSON và XML cũng như cơ sở dữ liệu quan hệ và không quan hệ.
Sử dụng đối tượng Tệp tích hợp của Python, có thể ghi dữ liệu chuỗi vào tệp đĩa và đọc từ đó. Thư viện tiêu chuẩn của Python, cung cấp các mô-đun để lưu trữ và truy xuất dữ liệu được tuần tự hóa trong các cấu trúc dữ liệu khác nhau như JSON và XML.
DB-API của Python cung cấp một cách tiêu chuẩn để tương tác với cơ sở dữ liệu quan hệ. Các gói Python của bên thứ ba khác, trình bày chức năng giao tiếp với cơ sở dữ liệu NOSQL như MongoDB và Cassandra.
Hướng dẫn này cũng giới thiệu, cơ sở dữ liệu ZODB là một API ổn định cho các đối tượng Python. Định dạng Microsoft Excel là một định dạng tệp dữ liệu rất phổ biến. Trong hướng dẫn này, chúng ta sẽ học cách xử lý tệp .xlsx thông qua Python.
Python sử dụng tích hợp sẵn input() và print()chức năng để thực hiện các hoạt động đầu vào / đầu ra tiêu chuẩn. Hàm input () đọc byte từ thiết bị dòng nhập chuẩn, tức là bàn phím.
Các print()mặt khác, gửi dữ liệu tới thiết bị dòng đầu ra tiêu chuẩn tức là màn hình hiển thị. Chương trình Python tương tác với các thiết bị IO này thông qua các đối tượng luồng tiêu chuẩnstdin và stdout được định nghĩa trong mô-đun sys.
Các input()hàm thực sự là một trình bao bọc xung quanh phương thức readline () của đối tượng sys.stdin. Tất cả các tổ hợp phím từ dòng nhập liệu được nhận cho đến khi nhấn phím 'Enter'.
>>> import sys
>>> x=sys.stdin.readline()
Welcome to TutorialsPoint
>>> x
'Welcome to TutorialsPoint\n'
Lưu ý rằng, readline()hàm để lại một ký tự '\ n' ở cuối. Ngoài ra còn có một phương thức read () đọc dữ liệu từ luồng đầu vào tiêu chuẩn cho đến khi nó được kết thúc bởiCtrl+D tính cách.
>>> x=sys.stdin.read()
Hello
Welcome to TutorialsPoint
>>> x
'Hello\nWelcome to TutorialsPoint\n'
Tương tự, print() là một hàm tiện lợi mô phỏng phương thức write () của đối tượng stdout.
>>> x='Welcome to TutorialsPoint\n'
>>> sys.stdout.write(x)
Welcome to TutorialsPoint
26
Cũng giống như các đối tượng dòng được xác định trước stdin và stdout, một chương trình Python có thể đọc dữ liệu từ và gửi dữ liệu đến tệp đĩa hoặc ổ cắm mạng. Chúng cũng là những dòng suối. Bất kỳ đối tượng nào có phương thức read () là một luồng đầu vào. Bất kỳ đối tượng nào có phương thức write () là một luồng đầu ra. Giao tiếp với luồng được thiết lập bằng cách lấy tham chiếu đến đối tượng luồng với hàm open () tích hợp sẵn.
hàm open ()
Hàm dựng sẵn này sử dụng các đối số sau:
f=open(name, mode, buffering)
Tham số tên, là tên của tệp đĩa hoặc chuỗi byte, chế độ là chuỗi một ký tự tùy chọn để chỉ định loại hoạt động sẽ được thực hiện (đọc, ghi, nối thêm, v.v.) và tham số đệm là 0, 1 hoặc -1 cho biết bộ đệm đang tắt, bật hoặc mặc định của hệ thống.
Chế độ mở tệp được liệt kê như bảng dưới đây. Chế độ mặc định là 'r'
Sr.No | Thông số & Mô tả |
---|---|
1 | R Mở để đọc (mặc định) |
2 | W Mở để ghi, cắt bớt tệp trước |
3 | X Tạo một tệp mới và mở nó để viết |
4 | A Mở để ghi, nối vào cuối tệp nếu nó tồn tại |
5 | B Chế độ nhị phân |
6 | T Chế độ văn bản (mặc định) |
7 | + Mở tệp đĩa để cập nhật (đọc và ghi) |
Để lưu dữ liệu vào tệp, nó phải được mở bằng chế độ 'w'.
f=open('test.txt','w')
Đối tượng tệp này hoạt động như một luồng đầu ra và có quyền truy cập vào phương thức write (). Phương thức write () gửi một chuỗi đến đối tượng này và được lưu trữ trong tệp bên dưới nó.
string="Hello TutorialsPoint\n"
f.write(string)
Điều quan trọng là phải đóng luồng, để đảm bảo rằng mọi dữ liệu còn lại trong bộ đệm được chuyển hoàn toàn sang nó.
file.close()
Hãy thử và mở 'test.txt' bằng bất kỳ trình chỉnh sửa thử nghiệm nào (chẳng hạn như notepad) để xác nhận việc tạo tệp thành công.
Để đọc nội dung của 'test.txt' theo chương trình, nó phải được mở ở chế độ 'r'.
f=open('test.txt','r')
Đối tượng này hoạt động như một luồng đầu vào. Python có thể tìm nạp dữ liệu từ luồng bằng cách sử dụngread() phương pháp.
string=f.read()
print (string)
Nội dung của tệp được hiển thị trên bảng điều khiển Python. Đối tượng Tệp cũng hỗ trợreadline() phương thức có thể đọc chuỗi cho đến khi nó gặp ký tự EOF.
Tuy nhiên, nếu cùng một tệp được mở ở chế độ 'w' để lưu trữ văn bản bổ sung trong đó, nội dung trước đó sẽ bị xóa. Bất cứ khi nào, một tệp được mở với quyền ghi, nó được coi như thể đó là một tệp mới. Để thêm dữ liệu vào tệp hiện có, hãy sử dụng 'a' cho chế độ nối thêm.
f=open('test.txt','a')
f.write('Python Tutorials\n')
Tệp bây giờ, có trước đó cũng như chuỗi mới được thêm vào. Đối tượng tệp cũng hỗ trợwritelines() để ghi từng chuỗi trong một đối tượng danh sách vào tệp.
f=open('test.txt','a')
lines=['Java Tutorials\n', 'DBMS tutorials\n', 'Mobile development tutorials\n']
f.writelines(lines)
f.close()
Thí dụ
Các readlines()phương thức trả về một danh sách các chuỗi, mỗi chuỗi đại diện cho một dòng trong tệp. Cũng có thể đọc từng dòng tệp cho đến khi đạt đến cuối tệp.
f=open('test.txt','r')
while True:
line=f.readline()
if line=='' : break
print (line, end='')
f.close()
Đầu ra
Hello TutorialsPoint
Python Tutorials
Java Tutorials
DBMS tutorials
Mobile development tutorials
Chế độ nhị phân
Theo mặc định, thao tác đọc / ghi trên một đối tượng tệp được thực hiện trên dữ liệu chuỗi văn bản. Nếu chúng ta muốn xử lý các tệp thuộc các loại khác nhau như phương tiện (mp3), tệp thực thi (exe), ảnh (jpg), v.v., chúng ta cần thêm tiền tố 'b' vào chế độ đọc / ghi.
Câu lệnh sau sẽ chuyển đổi một chuỗi thành byte và ghi vào một tệp.
f=open('test.bin', 'wb')
data=b"Hello World"
f.write(data)
f.close()
Cũng có thể chuyển đổi chuỗi văn bản thành byte bằng cách sử dụng hàm encode ().
data="Hello World".encode('utf-8')
Chúng ta cần sử dụng ‘rb’chế độ đọc tệp nhị phân. Giá trị trả về của phương thức read () được giải mã đầu tiên trước khi in.
f=open('test.bin', 'rb')
data=f.read()
print (data.decode(encoding='utf-8'))
Để ghi dữ liệu số nguyên trong tệp nhị phân, đối tượng số nguyên phải được chuyển đổi thành byte bằng to_bytes() phương pháp.
n=25
n.to_bytes(8,'big')
f=open('test.bin', 'wb')
data=n.to_bytes(8,'big')
f.write(data)
Để đọc lại từ tệp nhị phân, hãy chuyển đổi đầu ra của hàm read () thành số nguyên bởi hàm from_bytes ().
f=open('test.bin', 'rb')
data=f.read()
n=int.from_bytes(data, 'big')
print (n)
Đối với dữ liệu dấu phẩy động, chúng ta cần sử dụng struct mô-đun từ thư viện chuẩn của Python.
import struct
x=23.50
data=struct.pack('f',x)
f=open('test.bin', 'wb')
f.write(data)
Giải nén chuỗi khỏi hàm read (), để truy xuất dữ liệu float từ tệp nhị phân.
f=open('test.bin', 'rb')
data=f.read()
x=struct.unpack('f', data)
print (x)
Đọc / ghi đồng thời
Khi một tệp được mở để ghi (với 'w' hoặc 'a'), bạn không thể đọc từ đó và ngược lại. Làm như vậy sẽ dẫn đến lỗi UnSupportedOperation. Chúng ta cần đóng tệp trước khi thực hiện thao tác khác.
Để thực hiện đồng thời cả hai thao tác, chúng ta phải thêm ký tự '+' vào tham số chế độ. Do đó, chế độ 'w +' hoặc 'r +' cho phép sử dụng các phương thức write () cũng như read () mà không cần đóng tệp. Đối tượng File cũng hỗ trợ hàm seek () để tua lại luồng đến bất kỳ vị trí byte mong muốn nào.
f=open('test.txt','w+')
f.write('Hello world')
f.seek(0,0)
data=f.read()
print (data)
f.close()
Bảng sau đây tóm tắt tất cả các phương thức có sẵn cho một tệp như đối tượng.
Sr.No | Phương pháp & Mô tả |
---|---|
1 | close() Đóng tệp. Một tệp đã đóng không thể đọc hoặc ghi được nữa. |
2 | flush() Xả bộ đệm bên trong. |
3 | fileno() Trả về bộ mô tả tệp số nguyên. |
4 | next() Trả về dòng tiếp theo từ tệp mỗi khi nó được gọi. Sử dụng trình vòng lặp next () trong Python 3. |
5 | read([size]) Đọc tối đa các byte kích thước từ tệp (ít hơn nếu lần đọc chạm tới EOF trước khi nhận được các byte kích thước). |
6 | readline([size]) Đọc toàn bộ một dòng từ tệp. Một ký tự dòng mới ở cuối được giữ trong chuỗi. |
7 | readlines([sizehint]) Đọc cho đến khi EOF sử dụng readline () và trả về danh sách chứa các dòng. |
số 8 | seek(offset[, whence]) Đặt vị trí hiện tại của tệp. 0-đầu 1-hiện tại 2-kết thúc. |
9 | seek(offset[, whence]) Đặt vị trí hiện tại của tệp. 0-đầu 1-hiện tại 2-kết thúc. |
10 | tell() Trả về vị trí hiện tại của tệp |
11 | truncate([size]) Cắt bớt kích thước của tệp. |
12 | write(str) Ghi một chuỗi vào tệp. Không có giá trị quay lại. |
Ngoài đối tượng Tệp được trả về bởi open()chức năng, hoạt động IO tệp cũng có thể được thực hiện bằng cách sử dụng thư viện tích hợp sẵn của Python có mô-đun os cung cấp các chức năng hữu ích phụ thuộc vào hệ điều hành. Các hàm này thực hiện các thao tác đọc / ghi mức thấp trên tệp.
Các open()chức năng từ mô-đun os tương tự như open () tích hợp sẵn. Tuy nhiên, nó không trả về một đối tượng tệp mà là một bộ mô tả tệp, một số nguyên duy nhất tương ứng với tệp đã mở. Các giá trị 0, 1 và 2 của trình mô tả tệp đại diện cho các luồng stdin, stdout và stderr. Các tệp khác sẽ được cung cấp bộ mô tả tệp tăng dần từ 2 trở đi.
Như trong trường hợp của open() chức năng tích hợp, os.open()chức năng cũng cần chỉ định chế độ truy cập tệp. Bảng sau liệt kê các chế độ khác nhau như được định nghĩa trong mô-đun hệ điều hành.
Sr.No. | Mô-đun Os & Mô tả |
---|---|
1 | os.O_RDONLY Chỉ mở để đọc |
2 | os.O_WRONLY Chỉ mở để viết |
3 | os.O_RDWR Mở để đọc và viết |
4 | os.O_NONBLOCK Không chặn khi mở |
5 | os.O_APPEND Nối mỗi lần viết |
6 | os.O_CREAT Tạo tệp nếu nó không tồn tại |
7 | os.O_TRUNC Cắt bớt kích thước thành 0 |
số 8 | os.O_EXCL Lỗi nếu tạo và tệp tồn tại |
Để mở một tệp mới để ghi dữ liệu vào đó, hãy chỉ định O_WRONLY cũng như O_CREATchế độ bằng cách chèn toán tử pipe (|). Hàm os.open () trả về bộ mô tả tệp.
f=os.open("test.dat", os.O_WRONLY|os.O_CREAT)
Lưu ý rằng, dữ liệu được ghi vào tệp đĩa dưới dạng chuỗi byte. Do đó, một chuỗi bình thường được chuyển đổi thành chuỗi byte bằng cách sử dụng hàm encode () như trước đó.
data="Hello World".encode('utf-8')
Hàm write () trong mô-đun os chấp nhận chuỗi byte này và bộ mô tả tệp.
os.write(f,data)
Đừng quên đóng tệp bằng hàm close ().
os.close(f)
Để đọc nội dung của tệp bằng hàm os.read (), hãy sử dụng các câu lệnh sau:
f=os.open("test.dat", os.O_RDONLY)
data=os.read(f,20)
print (data.decode('utf-8'))
Lưu ý rằng, hàm os.read () cần bộ mô tả tệp và số byte được đọc (độ dài của chuỗi byte).
Nếu bạn muốn mở một tệp cho các thao tác đọc / ghi đồng thời, hãy sử dụng chế độ O_RDWR. Bảng sau đây cho thấy các chức năng quan trọng liên quan đến hoạt động tệp trong mô-đun os.
Sr.No | Chức năng & Mô tả |
---|---|
1 | os.close(fd) Đóng bộ mô tả tệp. |
2 | os.open(file, flags[, mode]) Mở tệp và đặt các cờ khác nhau theo cờ và có thể cả chế độ của nó theo chế độ. |
3 | os.read(fd, n) Đọc nhiều nhất n byte từ bộ mô tả tệp fd. Trả về một chuỗi chứa các byte đã đọc. Nếu đến cuối tệp được tham chiếu bởi fd, một chuỗi trống sẽ được trả về. |
4 | os.write(fd, str) Ghi chuỗi str vào bộ mô tả tệp fd. Trả về số byte thực sự được viết. |
Đối tượng tệp tích hợp của Python được trả về bởi hàm open () tích hợp của Python có một thiếu sót quan trọng. Khi được mở bằng chế độ 'w', phương thức write () chỉ chấp nhận đối tượng chuỗi.
Điều đó có nghĩa là, nếu bạn có dữ liệu được biểu diễn ở bất kỳ dạng không phải chuỗi nào, đối tượng của các lớp tích hợp sẵn (số, từ điển, danh sách hoặc bộ dữ liệu) hoặc các lớp do người dùng định nghĩa khác, nó không thể được ghi trực tiếp vào tệp. Trước khi viết, bạn cần chuyển đổi nó trong biểu diễn chuỗi của nó.
numbers=[10,20,30,40]
file=open('numbers.txt','w')
file.write(str(numbers))
file.close()
Đối với tệp nhị phân, đối số để write()phương thức phải là một đối tượng byte. Ví dụ: danh sách các số nguyên được chuyển đổi thành byte bằngbytearray() và sau đó được ghi vào tệp.
numbers=[10,20,30,40]
data=bytearray(numbers)
file.write(data)
file.close()
Để đọc lại dữ liệu từ tệp theo kiểu dữ liệu tương ứng, cần thực hiện chuyển đổi ngược lại.
file=open('numbers.txt','rb')
data=file.read()
print (list(data))
Kiểu chuyển đổi thủ công này, từ một đối tượng sang định dạng chuỗi hoặc byte (và ngược lại) là rất cồng kềnh và tẻ nhạt. Có thể lưu trữ trạng thái của một đối tượng Python dưới dạng luồng byte trực tiếp vào một tệp hoặc luồng bộ nhớ và truy xuất về trạng thái ban đầu của nó. Quá trình này được gọi là tuần tự hóa và hủy tuần tự hóa.
Thư viện được xây dựng trong Python chứa nhiều mô-đun khác nhau cho quá trình tuần tự hóa và giải mã hóa.
Sr.No. | Tên & Mô tả |
---|---|
1 | pickle Thư viện tuần tự hóa cụ thể trong Python |
2 | marshal Thư viện được sử dụng nội bộ để tuần tự hóa |
3 | shelve Đối tượng Pythonic bền bỉ |
4 | dbm thư viện cung cấp giao diện cho cơ sở dữ liệu Unix |
5 | csv thư viện để lưu trữ và truy xuất dữ liệu Python sang định dạng CSV |
6 | json Thư viện để tuần tự hóa sang định dạng JSON phổ biến |
Thuật ngữ của Python cho tuần tự hóa và giải mã hóa tương ứng là chọn lọc và giải nén. Mô-đun dưa chua trong thư viện Python, sử dụng định dạng dữ liệu rất cụ thể của Python. Do đó, các ứng dụng không phải Python có thể không giải mã dữ liệu đã chọn đúng cách. Bạn cũng không nên bỏ chọn dữ liệu từ nguồn chưa được xác thực.
Dữ liệu được tuần tự hóa (cóp nhặt) có thể được lưu trữ trong một chuỗi byte hoặc một tệp nhị phân. Mô-đun này xác địnhdumps() và loads()chức năng chọn và bỏ chọn dữ liệu bằng cách sử dụng chuỗi byte. Đối với quy trình dựa trên tệp, mô-đun códump() và load() chức năng.
Các giao thức kén của Python là các quy ước được sử dụng trong việc xây dựng và giải cấu trúc các đối tượng Python đến / từ dữ liệu nhị phân. Hiện tại, mô-đun dưa chua xác định 5 giao thức khác nhau như được liệt kê bên dưới:
Sr.No. | Tên & Mô tả |
---|---|
1 | Protocol version 0 Giao thức gốc "con người có thể đọc được" tương thích ngược với các phiên bản trước đó. |
2 | Protocol version 1 Định dạng nhị phân cũ cũng tương thích với các phiên bản Python trước. |
3 | Protocol version 2 Được giới thiệu trong Python 2.3 cung cấp khả năng chọn lọc hiệu quả các lớp kiểu mới. |
4 | Protocol version 3 Đã thêm bằng Python 3.0. được khuyến nghị khi cần có khả năng tương thích với các phiên bản Python 3 khác. |
5 | Protocol version 4 đã được thêm vào Python 3.4. Nó hỗ trợ thêm cho các đối tượng rất lớn |
Thí dụ
Mô-đun dưa bao gồm hàm dumps () trả về một biểu diễn chuỗi của dữ liệu đã ngâm.
from pickle import dump
dct={"name":"Ravi", "age":23, "Gender":"M","marks":75}
dctstring=dumps(dct)
print (dctstring)
Đầu ra
b'\x80\x03}q\x00(X\x04\x00\x00\x00nameq\x01X\x04\x00\x00\x00Raviq\x02X\x03\x00\x00\x00ageq\x03K\x17X\x06\x00\x00\x00Genderq\x04X\x01\x00\x00\x00Mq\x05X\x05\x00\x00\x00marksq\x06KKu.
Thí dụ
Sử dụng hàm load (), để bỏ chọn chuỗi và lấy đối tượng từ điển gốc.
from pickle import load
dct=loads(dctstring)
print (dct)
Đầu ra
{'name': 'Ravi', 'age': 23, 'Gender': 'M', 'marks': 75}
Các đối tượng đã chọn cũng có thể được lưu trữ liên tục trong tệp đĩa bằng cách sử dụng hàm dump () và được truy xuất bằng hàm load ().
import pickle
f=open("data.txt","wb")
dct={"name":"Ravi", "age":23, "Gender":"M","marks":75}
pickle.dump(dct,f)
f.close()
#to read
import pickle
f=open("data.txt","rb")
d=pickle.load(f)
print (d)
f.close()
Mô-đun pickle cũng cung cấp API hướng đối tượng cho cơ chế tuần tự hóa dưới dạng Pickler và Unpickler các lớp học.
Như đã đề cập ở trên, cũng giống như các đối tượng dựng sẵn trong Python, các đối tượng của các lớp do người dùng định nghĩa cũng có thể được tuần tự hóa liên tục trong tệp đĩa. Trong chương trình sau, chúng tôi xác định một lớp Người dùng với tên và số điện thoại di động làm thuộc tính cá thể của nó. Ngoài phương thức khởi tạo __init __ (), lớp ghi đè phương thức __str __ () trả về biểu diễn chuỗi của đối tượng của nó.
class User:
def __init__(self,name, mob):
self.name=name
self.mobile=mob
def __str__(self):
return ('Name: {} mobile: {} '. format(self.name, self.mobile))
Để chọn đối tượng của lớp trên trong một tệp, chúng ta sử dụng lớp pickler và phương thức dump () của nó.
from pickle import Pickler
user1=User('Rajani', '[email protected]', '1234567890')
file=open('userdata','wb')
Pickler(file).dump(user1)
Pickler(file).dump(user2)
file.close()
Ngược lại, lớp Unpickler có phương thức load () để truy xuất đối tượng được tuần tự hóa như sau:
from pickle import Unpickler
file=open('usersdata','rb')
user1=Unpickler(file).load()
print (user1)
Các tính năng tuần tự hóa đối tượng của mô-đun soái trong thư viện chuẩn của Python tương tự như mô-đun dưa chua. Tuy nhiên, mô-đun này không được sử dụng cho dữ liệu mục đích chung. Mặt khác, nó được sử dụng bởi chính Python để tuần tự hóa đối tượng nội bộ của Python để hỗ trợ các hoạt động đọc / ghi trên các phiên bản đã biên dịch của mô-đun Python (tệp .pyc).
Định dạng dữ liệu được sử dụng bởi mô-đun soái không tương thích trên các phiên bản Python. Do đó, một tập lệnh Python đã biên dịch (tệp .pyc) của một phiên bản có thể sẽ không thực thi trên phiên bản khác.
Cũng giống như mô-đun pickle, mô-đun soái cũng xác định các hàm load () và dump () để đọc và ghi các đối tượng được điều chỉnh từ / đến tệp.
đổ ()
Hàm này ghi biểu diễn byte của đối tượng Python được hỗ trợ vào một tệp. Bản thân tệp là một tệp nhị phân có quyền ghi
tải ()
Hàm này đọc dữ liệu byte từ tệp nhị phân và chuyển đổi nó thành đối tượng Python.
Ví dụ sau minh họa việc sử dụng các hàm dump () và load () để xử lý các đối tượng mã của Python, được sử dụng để lưu trữ các mô-đun Python được biên dịch trước.
Mã sử dụng tích hợp sẵn compile() hàm để xây dựng một đối tượng mã từ một chuỗi nguồn nhúng các lệnh Python.
compile(source, file, mode)
Tham số tệp phải là tệp mà từ đó mã được đọc. Nếu nó không được đọc từ một tệp, hãy chuyển bất kỳ chuỗi tùy ý nào.
Tham số chế độ là 'execute' nếu nguồn chứa chuỗi câu lệnh, 'eval' nếu có một biểu thức đơn lẻ hoặc 'đơn' nếu nó chứa một câu lệnh tương tác.
Đối tượng mã biên dịch sau đó được lưu trữ trong tệp .pyc bằng cách sử dụng hàm dump ().
import marshal
script = """
a=10
b=20
print ('addition=',a+b)
"""
code = compile(script, "script", "exec")
f=open("a.pyc","wb")
marshal.dump(code, f)
f.close()
Để giải mã hóa, đối tượng từ tệp .pyc sử dụng hàm load (). Vì, nó trả về một đối tượng mã, nó có thể được chạy bằng cách sử dụng execute (), một hàm tích hợp sẵn khác.
import marshal
f=open("a.pyc","rb")
data=marshal.load(f)
exec (data)
Mô-đun giá đỡ trong thư viện chuẩn của Python cung cấp cơ chế duy trì đối tượng đơn giản nhưng hiệu quả. Đối tượng kệ được định nghĩa trong mô-đun này là đối tượng giống như từ điển được lưu trữ liên tục trong tệp đĩa. Điều này tạo ra một tệp tương tự như cơ sở dữ liệu dbm trên hệ thống giống như UNIX.
Từ điển kệ có những hạn chế nhất định. Chỉ kiểu dữ liệu chuỗi có thể được sử dụng làm khóa trong đối tượng từ điển đặc biệt này, trong khi bất kỳ đối tượng Python có thể nhặt được nào cũng có thể được sử dụng làm giá trị.
Mô-đun giá đỡ định nghĩa ba lớp như sau:
Sr.No | Mô-đun giá đỡ & Mô tả |
---|---|
1 | Shelf Đây là lớp cơ sở cho việc triển khai kệ. Nó được khởi tạo với đối tượng giống như dict. |
2 | BsdDbShelf Đây là một lớp con của lớp Shelf. Đối tượng dict được truyền tới phương thức khởi tạo của nó phải hỗ trợ các phương thức first (), next (), before (), last () và set_location (). |
3 | DbfilenameShelf Đây cũng là một lớp con của Shelf nhưng chấp nhận tên tệp làm tham số cho phương thức khởi tạo của nó chứ không phải đối tượng dict. |
Hàm open () được xác định trong mô-đun giá đỡ trả về một DbfilenameShelf vật.
open(filename, flag='c', protocol=None, writeback=False)
Tham số tên tệp được gán cho cơ sở dữ liệu đã tạo. Giá trị mặc định cho tham số cờ là 'c' để truy cập đọc / ghi. Các cờ khác là 'w' (chỉ ghi) 'r' (chỉ đọc) và 'n' (mới với đọc / ghi).
Bản thân quá trình tuần tự hóa được điều chỉnh bởi giao thức pickle, mặc định là không. Tham số ghi lại tham số cuối cùng theo mặc định là sai. Nếu được đặt thành true, các mục đã truy cập sẽ được lưu vào bộ nhớ đệm. Mỗi cuộc gọi truy cập hoạt động đồng bộ () và đóng (), do đó quá trình có thể chậm.
Đoạn mã sau tạo một cơ sở dữ liệu và lưu trữ các mục từ điển trong đó.
import shelve
s=shelve.open("test")
s['name']="Ajay"
s['age']=23
s['marks']=75
s.close()
Thao tác này sẽ tạo tệp test.dir trong thư mục hiện tại và lưu trữ dữ liệu khóa-giá trị ở dạng băm. Đối tượng Shelf có sẵn các phương thức sau:
Sr.No. | Phương pháp & Mô tả |
---|---|
1 | close() đồng bộ hóa và đóng đối tượng dict liên tục. |
2 | sync() Ghi lại tất cả các mục trong bộ nhớ cache nếu giá được mở với ghi lại được đặt thành Đúng. |
3 | get() trả về giá trị được liên kết với khóa |
4 | items() danh sách các bộ giá trị - mỗi bộ giá trị là cặp giá trị khóa |
5 | keys() danh sách chìa khóa kệ |
6 | pop() loại bỏ khóa được chỉ định và trả về giá trị tương ứng. |
7 | update() Cập nhật giá từ một chính sách / có thể lặp lại khác |
số 8 | values() danh sách các giá trị kệ |
Để truy cập giá trị của một khóa cụ thể trong giá -
s=shelve.open('test')
print (s['age']) #this will print 23
s['age']=25
print (s.get('age')) #this will print 25
s.pop('marks') #this will remove corresponding k-v pair
Như trong một đối tượng từ điển dựng sẵn, các phương thức items (), key () và giá trị () trả về các đối tượng dạng xem.
print (list(s.items()))
[('name', 'Ajay'), ('age', 25), ('marks', 75)]
print (list(s.keys()))
['name', 'age', 'marks']
print (list(s.values()))
['Ajay', 25, 75]
Để hợp nhất các mục của một từ điển khác với phương thức update () trên giá.
d={'salary':10000, 'designation':'manager'}
s.update(d)
print (list(s.items()))
[('name', 'Ajay'), ('age', 25), ('salary', 10000), ('designation', 'manager')]
Gói dbm trình bày một từ điển giống như cơ sở dữ liệu kiểu DBM giao diện. DBM stands for DataBase Manager. Điều này được sử dụng bởi hệ điều hành UNIX (và UNIX giống như). Thư viện dbbm là một công cụ cơ sở dữ liệu đơn giản được viết bởi Ken Thompson. Các cơ sở dữ liệu này sử dụng các đối tượng chuỗi được mã hóa nhị phân làm khóa, cũng như giá trị.
Cơ sở dữ liệu lưu trữ dữ liệu bằng cách sử dụng một khóa đơn (khóa chính) trong các nhóm kích thước cố định và sử dụng kỹ thuật băm để cho phép truy xuất nhanh dữ liệu bằng khóa.
Gói dbm chứa các mô-đun sau:
dbm.gnu mô-đun là một giao diện cho phiên bản thư viện DBM được triển khai bởi dự án GNU.
dbm.ndbm mô-đun cung cấp một giao diện để triển khai UNIX nbdm.
dbm.dumbđược sử dụng như một tùy chọn dự phòng trong trường hợp này, không tìm thấy các triển khai dbm khác. Điều này không yêu cầu phụ thuộc bên ngoài nhưng chậm hơn những người khác.
>>> dbm.whichdb('mydbm.db')
'dbm.dumb'
>>> import dbm
>>> db=dbm.open('mydbm.db','n')
>>> db['name']=Raj Deshmane'
>>> db['address']='Kirtinagar Pune'
>>> db['PIN']='431101'
>>> db.close()
Hàm open () cho phép chế độ các cờ này -
Sr.No. | Giá trị & Ý nghĩa |
---|---|
1 | 'r' Mở cơ sở dữ liệu hiện có để chỉ đọc (mặc định) |
2 | 'w' Mở cơ sở dữ liệu hiện có để đọc và ghi |
3 | 'c' Mở cơ sở dữ liệu để đọc và ghi, tạo nó nếu nó không tồn tại |
4 | 'n' Luôn tạo cơ sở dữ liệu mới, trống, mở để đọc và ghi |
Đối tượng dbm là một đối tượng giống như từ điển, giống như đối tượng kệ. Do đó, tất cả các thao tác từ điển có thể được thực hiện. Đối tượng dbm có thể gọi các phương thức get (), pop (), append () và update (). Mã sau sẽ mở 'mydbm.db' với cờ 'r' và lặp qua tập hợp các cặp khóa-giá trị.
>>> db=dbm.open('mydbm.db','r')
>>> for k,v in db.items():
print (k,v)
b'name' : b'Raj Deshmane'
b'address' : b'Kirtinagar Pune'
b'PIN' : b'431101'
CSV stands for comma separated values. Định dạng tệp này là định dạng dữ liệu thường được sử dụng trong khi xuất / nhập dữ liệu đến / từ bảng tính và bảng dữ liệu trong cơ sở dữ liệu. Mô-đun csv được kết hợp trong thư viện chuẩn của Python là kết quả của PEP 305. Nó trình bày các lớp và phương pháp để thực hiện các thao tác đọc / ghi trên tệp CSV theo khuyến nghị của PEP 305.
CSV là định dạng dữ liệu xuất ưa thích của phần mềm bảng tính Excel của Microsoft. Tuy nhiên, mô-đun csv cũng có thể xử lý dữ liệu được biểu thị bằng các phương ngữ khác.
Giao diện API CSV bao gồm các lớp người viết và người đọc sau:
nhà văn()
Hàm này trong mô-đun csv trả về một đối tượng nhà văn chuyển đổi dữ liệu thành một chuỗi được phân tách và lưu trữ trong một đối tượng tệp. Hàm cần một đối tượng tệp có quyền ghi dưới dạng tham số. Mỗi hàng được viết trong tệp sẽ tạo ra một ký tự dòng mới. Để ngăn không gian bổ sung giữa các dòng, tham số dòng mới được đặt thành ''.
Lớp nhà văn có các phương thức sau:
ghi ()
Phương thức này ghi các mục trong một tệp có thể lặp lại (danh sách, tuple hoặc chuỗi), phân tách chúng bằng ký tự dấu phẩy.
ghi ()
Phương thức này nhận một danh sách các tệp lặp, làm tham số và ghi mỗi mục dưới dạng một dòng mục được phân tách bằng dấu phẩy trong tệp.
Example
Ví dụ sau cho thấy việc sử dụng hàm write (). Đầu tiên, một tệp được mở ở chế độ 'w'. Tệp này được sử dụng để lấy đối tượng nhà văn. Mỗi bộ trong danh sách các bộ sau đó được ghi vào tệp bằng phương thức writerow ().
import csv
persons=[('Lata',22,45),('Anil',21,56),('John',20,60)]
csvfile=open('persons.csv','w', newline='')
obj=csv.writer(csvfile)
for person in persons:
obj.writerow(person)
csvfile.close()
Output
Thao tác này sẽ tạo tệp 'people.csv' trong thư mục hiện tại. Nó sẽ hiển thị dữ liệu sau đây.
Lata,22,45
Anil,21,56
John,20,60
Thay vì lặp lại danh sách để viết từng hàng riêng lẻ, chúng ta có thể sử dụng phương thức writerows ().
csvfile=open('persons.csv','w', newline='')
persons=[('Lata',22,45),('Anil',21,56),('John',20,60)]
obj=csv.writer(csvfile)
obj.writerows(persons)
obj.close()
người đọc()
Hàm này trả về một đối tượng reader trả về một trình lặp các dòng trong csv file. Sử dụng vòng lặp for thông thường, tất cả các dòng trong tệp được hiển thị trong ví dụ sau:
Thí dụ
csvfile=open('persons.csv','r', newline='')
obj=csv.reader(csvfile)
for row in obj:
print (row)
Đầu ra
['Lata', '22', '45']
['Anil', '21', '56']
['John', '20', '60']
Đối tượng reader là một trình lặp. Do đó, nó hỗ trợ hàm next (), cũng có thể được sử dụng để hiển thị tất cả các dòng trong tệp csv thay vìfor loop.
csvfile=open('persons.csv','r', newline='')
obj=csv.reader(csvfile)
while True:
try:
row=next(obj)
print (row)
except StopIteration:
break
Như đã đề cập trước đó, mô-đun csv sử dụng Excel làm phương ngữ mặc định của nó. Mô-đun csv cũng định nghĩa một lớp phương ngữ. Phương ngữ là tập hợp các tiêu chuẩn được sử dụng để triển khai giao thức CSV. Danh sách các phương ngữ có sẵn có thể được lấy bằng hàm list_dialects ().
>>> csv.list_dialects()
['excel', 'excel-tab', 'unix']
Ngoài các tệp lặp, mô-đun csv có thể xuất một đối tượng từ điển sang tệp CSV và đọc nó để điền đối tượng từ điển Python. Với mục đích này, mô-đun này định nghĩa các lớp sau:
DictWriter ()
Hàm này trả về một đối tượng DictWriter. Nó tương tự như đối tượng nhà văn, nhưng các hàng được ánh xạ tới đối tượng từ điển. Hàm cần một đối tượng tệp có quyền ghi và danh sách các khóa được sử dụng trong từ điển dưới dạng tham số tên trường. Điều này được sử dụng để viết dòng đầu tiên trong tệp dưới dạng tiêu đề.
người viết ()
Phương thức này ghi danh sách các khóa trong từ điển dưới dạng một dòng được phân tách bằng dấu phẩy ở dòng đầu tiên trong tệp.
Trong ví dụ sau, một danh sách các mục từ điển được xác định. Mỗi mục trong danh sách là một từ điển. Sử dụng phương thức wrirows (), chúng được ghi vào tệp theo cách được phân tách bằng dấu phẩy.
persons=[
{'name':'Lata', 'age':22, 'marks':45},
{'name':'Anil', 'age':21, 'marks':56},
{'name':'John', 'age':20, 'marks':60}
]
csvfile=open('persons.csv','w', newline='')
fields=list(persons[0].keys())
obj=csv.DictWriter(csvfile, fieldnames=fields)
obj.writeheader()
obj.writerows(persons)
csvfile.close()
Tệp people.csv hiển thị nội dung sau:
name,age,marks
Lata,22,45
Anil,21,56
John,20,60
DictReader ()
Hàm này trả về một đối tượng DictReader từ tệp CSV bên dưới. Trong trường hợp, đối tượng reader, đối tượng này cũng là một trình lặp, sử dụng nội dung nào của tệp được truy xuất.
csvfile=open('persons.csv','r', newline='')
obj=csv.DictReader(csvfile)
Lớp này cung cấp thuộc tính tên trường, trả về các khóa từ điển được sử dụng làm tiêu đề của tệp.
print (obj.fieldnames)
['name', 'age', 'marks']
Sử dụng vòng lặp qua đối tượng DictReader để tìm nạp các đối tượng từ điển riêng lẻ.
for row in obj:
print (row)
Điều này dẫn đến kết quả sau:
OrderedDict([('name', 'Lata'), ('age', '22'), ('marks', '45')])
OrderedDict([('name', 'Anil'), ('age', '21'), ('marks', '56')])
OrderedDict([('name', 'John'), ('age', '20'), ('marks', '60')])
Để chuyển đổi đối tượng OrderedDict sang từ điển thông thường, trước tiên chúng ta phải nhập OrderedDict từ mô-đun bộ sưu tập.
from collections import OrderedDict
r=OrderedDict([('name', 'Lata'), ('age', '22'), ('marks', '45')])
dict(r)
{'name': 'Lata', 'age': '22', 'marks': '45'}
JSON là viết tắt của JavaScript Object Notation. Đây là một định dạng trao đổi dữ liệu nhẹ. Nó là một định dạng văn bản đa nền tảng và độc lập với ngôn ngữ, được hỗ trợ bởi nhiều ngôn ngữ lập trình. Định dạng này được sử dụng để trao đổi dữ liệu giữa máy chủ web và máy khách.
Định dạng JSON tương tự như dưa chua. Tuy nhiên, tuần tự hóa pickle là đặc trưng của Python trong khi định dạng JSON được thực hiện bởi nhiều ngôn ngữ do đó đã trở thành tiêu chuẩn chung. Chức năng và giao diện của mô-đun json trong thư viện tiêu chuẩn của Python tương tự như các mô-đun pickle và marshal.
Cũng giống như trong mô-đun dưa chua, mô-đun json cũng cung cấp dumps() và loads() hàm để tuần tự hóa đối tượng Python thành chuỗi được mã hóa JSON và dump() và load() các hàm ghi và đọc các đối tượng Python được tuần tự hóa đến / từ tệp.
dumps() - Hàm này chuyển đổi đối tượng sang định dạng JSON.
loads() - Hàm này chuyển đổi một chuỗi JSON trở lại đối tượng Python.
Ví dụ sau minh họa cách sử dụng cơ bản của các hàm này:
import json
data=['Rakesh',{'marks':(50,60,70)}]
s=json.dumps(data)
json.loads(s)
Hàm dumps () có thể nhận đối số sort_keys tùy chọn. Theo mặc định, nó là False. Nếu được đặt thành True, các khóa từ điển sẽ xuất hiện theo thứ tự được sắp xếp trong chuỗi JSON.
Hàm dumps () có một tham số tùy chọn khác được gọi là thụt lề, nhận một số làm giá trị. Nó quyết định độ dài của mỗi đoạn biểu diễn được định dạng của chuỗi json, tương tự như kết quả in.
Mô-đun json cũng có API hướng đối tượng tương ứng với các chức năng trên. Có hai lớp được định nghĩa trong mô-đun - JSONEncoder và JSONDecoder.
JSONEncoder lớp
Đối tượng của lớp này là bộ mã hóa cho cấu trúc dữ liệu Python. Mỗi kiểu dữ liệu Python được chuyển đổi theo kiểu JSON tương ứng như được hiển thị trong bảng sau:
Python | JSON |
---|---|
Dict | vật |
danh sách, tuple | mảng |
Str | chuỗi |
int, float, int- & float có nguồn gốc Enums | con số |
Thật | thật |
Sai | sai |
không ai | vô giá trị |
Lớp JSONEncoder được khởi tạo bởi hàm tạo JSONEncoder (). Các phương thức quan trọng sau được định nghĩa trong lớp mã hóa:
Sr.No. | Phương pháp & Mô tả |
---|---|
1 | encode() tuần tự hóa đối tượng Python thành định dạng JSON |
2 | iterencode() Mã hóa đối tượng và trả về một trình lặp tạo ra dạng được mã hóa của từng mục trong đối tượng. |
3 | indent Xác định mức thụt lề của chuỗi mã hóa |
4 | sort_keys là true hoặc false để làm cho các khóa xuất hiện theo thứ tự được sắp xếp hoặc không. |
5 | Check_circular nếu Đúng, hãy kiểm tra tham chiếu vòng tròn trong đối tượng loại vùng chứa |
Ví dụ sau mã hóa đối tượng danh sách Python.
e=json.JSONEncoder()
e.encode(data)
Lớp JSONDecoder
Đối tượng của lớp này giúp giải mã trong chuỗi json trở lại cấu trúc dữ liệu Python. Phương thức chính trong lớp này là decode (). Mã ví dụ sau truy xuất đối tượng danh sách Python từ chuỗi mã hóa ở bước trước.
d=json.JSONDecoder()
d.decode(s)
Mô-đun json định nghĩa load() và dump() các chức năng để ghi dữ liệu JSON vào một tệp như đối tượng - có thể là tệp đĩa hoặc luồng byte và đọc lại dữ liệu từ chúng.
đổ ()
Hàm này ghi dữ liệu đối tượng JSONed Python vào một tệp. Tệp phải được mở bằng chế độ 'w'.
import json
data=['Rakesh', {'marks': (50, 60, 70)}]
fp=open('json.txt','w')
json.dump(data,fp)
fp.close()
Mã này sẽ tạo 'json.txt' trong thư mục hiện tại. Nó hiển thị các nội dung như sau:
["Rakesh", {"marks": [50, 60, 70]}]
tải ()
Hàm này tải dữ liệu JSON từ tệp và trả về đối tượng Python từ nó. Tệp phải được mở với quyền đọc (nên có chế độ 'r').
Example
fp=open('json.txt','r')
ret=json.load(fp)
print (ret)
fp.close()
Output
['Rakesh', {'marks': [50, 60, 70]}]
Các json.tool mô-đun cũng có giao diện dòng lệnh xác thực dữ liệu trong tệp và in đối tượng JSON theo cách định dạng đẹp.
C:\python37>python -m json.tool json.txt
[
"Rakesh",
{
"marks": [
50,
60,
70
]
}
]
XML là từ viết tắt của eXtensible Markup Language. Nó là một ngôn ngữ di động, mã nguồn mở và đa nền tảng, rất giống HTML hoặc SGML và được World Wide Web Consortium khuyến nghị.
Đây là một định dạng trao đổi dữ liệu nổi tiếng, được sử dụng bởi một số lượng lớn các ứng dụng như dịch vụ web, công cụ văn phòng và Service Oriented Architectures(SOA). Định dạng XML có thể đọc được bằng máy và con người có thể đọc được.
Gói xml của thư viện Python tiêu chuẩn bao gồm các mô-đun sau để xử lý XML:
Sr.No. | Mô-đun & Mô tả |
---|---|
1 | xml.etree.ElementTree API ElementTree, một bộ xử lý XML đơn giản và nhẹ |
2 | xml.dom định nghĩa API DOM |
3 | xml.dom.minidom triển khai DOM tối thiểu |
4 | xml.sax Triển khai giao diện SAX2 |
5 | xml.parsers.expat ràng buộc phân tích cú pháp người nước ngoài |
Dữ liệu trong tài liệu XML được sắp xếp theo định dạng phân cấp giống cây, bắt đầu bằng gốc và các phần tử. Mỗi phần tử là một nút duy nhất trong cây và có một thuộc tính nằm trong các thẻ <> và </>. Một hoặc nhiều phần tử con có thể được gán cho mỗi phần tử.
Sau đây là một ví dụ điển hình của tài liệu XML:
<?xml version = "1.0" encoding = "iso-8859-1"?>
<studentlist>
<student>
<name>Ratna</name>
<subject>Physics</subject>
<marks>85</marks>
</student>
<student>
<name>Kiran</name>
<subject>Maths</subject>
<marks>100</marks>
</student>
<student>
<name>Mohit</name>
<subject>Biology</subject>
<marks>92</marks>
</student>
</studentlist>
Trong khi sử dụng ElementTree, bước đầu tiên là thiết lập phần tử gốc của cây. Mỗi Phần tử có một thẻ và thuộc tính là một đối tượng dict. Đối với phần tử gốc, thuộc tính là một từ điển trống.
import xml.etree.ElementTree as xmlobj
root=xmlobj.Element('studentList')
Bây giờ, chúng ta có thể thêm một hoặc nhiều phần tử dưới phần tử gốc. Mỗi đối tượng phần tử có thể cóSubElements. Mỗi thành phần con có một thuộc tính và thuộc tính văn bản.
student=xmlobj.Element('student')
nm=xmlobj.SubElement(student, 'name')
nm.text='name'
subject=xmlobj.SubElement(student, 'subject')
nm.text='Ratna'
subject.text='Physics'
marks=xmlobj.SubElement(student, 'marks')
marks.text='85'
Phần tử mới này được nối vào thư mục gốc bằng phương thức append ().
root.append(student)
Nối nhiều phần tử như mong muốn bằng phương pháp trên. Cuối cùng, đối tượng phần tử gốc được ghi vào một tệp.
tree = xmlobj.ElementTree(root)
file = open('studentlist.xml','wb')
tree.write(file)
file.close()
Bây giờ, chúng ta xem cách phân tích cú pháp tệp XML. Đối với điều đó, hãy xây dựng cây tài liệu với tên của nó dưới dạng tham số tệp trong phương thức khởi tạo ElementTree.
tree = xmlobj.ElementTree(file='studentlist.xml')
Đối tượng cây có getroot() phương thức để lấy phần tử gốc và getchildren () trả về danh sách các phần tử bên dưới nó.
root = tree.getroot()
children = root.getchildren()
Một đối tượng từ điển tương ứng với mỗi phần tử con được xây dựng bằng cách lặp qua tập hợp phần tử con của mỗi nút con.
for child in children:
student={}
pairs = child.getchildren()
for pair in pairs:
product[pair.tag]=pair.text
Mỗi từ điển sau đó được nối vào một danh sách trả về danh sách ban đầu của các đối tượng từ điển.
SAXlà một giao diện tiêu chuẩn để phân tích cú pháp XML theo hướng sự kiện. Phân tích cú pháp XML với SAX yêu cầu ContentHandler bằng cách phân lớp con xml.sax.ContentHandler. Bạn đăng ký các cuộc gọi lại cho các sự kiện quan tâm và sau đó, hãy để trình phân tích cú pháp tiếp tục thông qua tài liệu.
SAX hữu ích khi tài liệu của bạn lớn hoặc bạn có giới hạn về bộ nhớ vì nó phân tích cú pháp tệp khi đọc từ đĩa do toàn bộ tệp không bao giờ được lưu trữ trong bộ nhớ.
Mô hình Đối tượng Tài liệu
API (DOM) là một khuyến nghị của World Wide Web Consortium. Trong trường hợp này, toàn bộ tệp được đọc vào bộ nhớ và được lưu trữ dưới dạng phân cấp (dựa trên cây) để thể hiện tất cả các tính năng của tài liệu XML.
SAX, không nhanh như DOM, với các tệp lớn. Mặt khác, DOM có thể giết tài nguyên, nếu được sử dụng trên nhiều tệp nhỏ. SAX là chỉ đọc, trong khi DOM cho phép thay đổi tệp XML.
Định dạng plist chủ yếu được sử dụng bởi MAC OS X. Các tệp này về cơ bản là các tài liệu XML. Chúng lưu trữ và truy xuất các thuộc tính của một đối tượng. Thư viện Python chứa mô-đun plist, được sử dụng để đọc và ghi các tệp 'danh sách thuộc tính' (chúng thường có phần mở rộng .plist ').
Các plistlib mô-đun ít nhiều tương tự như các thư viện tuần tự hóa khác theo nghĩa, nó cũng cung cấp các hàm dumps () và load () để biểu diễn chuỗi của các đối tượng Python và các hàm load () và dump () cho hoạt động của đĩa.
Đối tượng từ điển sau duy trì thuộc tính (khóa) và giá trị tương ứng -
proplist = {
"name" : "Ganesh",
"designation":"manager",
"dept":"accts",
"salary" : {"basic":12000, "da":4000, "hra":800}
}
Để ghi các thuộc tính này vào tệp đĩa, chúng ta gọi hàm dump () trong mô-đun plist.
import plistlib
fileName=open('salary.plist','wb')
plistlib.dump(proplist, fileName)
fileName.close()
Ngược lại, để đọc lại các giá trị thuộc tính, hãy sử dụng hàm load () như sau:
fp= open('salary.plist', 'rb')
pl = plistlib.load(fp)
print(pl)
Một nhược điểm lớn của các tệp CSV, JSON, XML, v.v., là chúng không hữu ích lắm cho việc truy cập ngẫu nhiên và xử lý giao dịch vì bản chất chúng phần lớn không có cấu trúc. Do đó, rất khó sửa đổi nội dung.
Các tệp phẳng này không phù hợp với môi trường máy khách-máy chủ vì chúng thiếu khả năng xử lý không đồng bộ. Sử dụng các tệp dữ liệu không có cấu trúc dẫn đến dư thừa và không nhất quán dữ liệu.
Những vấn đề này có thể được khắc phục bằng cách sử dụng cơ sở dữ liệu quan hệ. Cơ sở dữ liệu là một tập hợp dữ liệu có tổ chức để loại bỏ sự dư thừa và không nhất quán, đồng thời duy trì tính toàn vẹn của dữ liệu. Mô hình cơ sở dữ liệu quan hệ rất phổ biến.
Khái niệm cơ bản của nó là sắp xếp dữ liệu trong bảng thực thể (gọi là quan hệ). Cấu trúc bảng thực thể cung cấp một thuộc tính có giá trị là duy nhất cho mỗi hàng. Một thuộc tính như vậy được gọi là'primary key'.
Khi khóa chính của một bảng xuất hiện trong cấu trúc của các bảng khác, nó được gọi là 'Foreign key'và điều này tạo thành cơ sở của mối quan hệ giữa hai người. Dựa trên mô hình này, có nhiều sản phẩm RDBMS phổ biến hiện có sẵn -
- GadFly
- mSQL
- MySQL
- PostgreSQL
- Microsoft SQL Server 2000
- Informix
- Interbase
- Oracle
- Sybase
- SQLite
SQLite là một cơ sở dữ liệu quan hệ nhẹ được sử dụng trong nhiều ứng dụng. Nó là một công cụ cơ sở dữ liệu SQL giao dịch độc lập, không máy chủ, không cấu hình, không giao dịch. Toàn bộ cơ sở dữ liệu là một tệp duy nhất, có thể được đặt ở bất kỳ đâu trong hệ thống tệp. Đó là một phần mềm mã nguồn mở, với kích thước rất nhỏ và cấu hình bằng không. Nó được sử dụng phổ biến trong các thiết bị nhúng, IOT và ứng dụng di động.
Tất cả cơ sở dữ liệu quan hệ sử dụng SQL để xử lý dữ liệu trong bảng. Tuy nhiên, trước đây, mỗi cơ sở dữ liệu này đã từng được kết nối với ứng dụng Python với sự trợ giúp của mô-đun Python cụ thể cho loại cơ sở dữ liệu.
Do đó, thiếu sự tương thích giữa chúng. Nếu người dùng muốn thay đổi sang sản phẩm cơ sở dữ liệu khác, điều đó sẽ chứng tỏ là khó. Vấn đề không tương thích này đã được giải quyết bằng cách nêu ra 'Đề xuất cải tiến Python (PEP 248)' để đề xuất giao diện nhất quán cho cơ sở dữ liệu quan hệ được gọi là DB-API. Các đề xuất mới nhất được gọi làDB-APIPhiên bản 2.0. (PEP 249)
Thư viện tiêu chuẩn của Python bao gồm mô-đun sqlite3 là một mô-đun tuân thủ DB-API để xử lý cơ sở dữ liệu SQLite thông qua chương trình Python. Chương này giải thích kết nối của Python với cơ sở dữ liệu SQLite.
Như đã đề cập trước đó, Python đã hỗ trợ sẵn cho cơ sở dữ liệu SQLite ở dạng mô-đun sqlite3. Đối với các cơ sở dữ liệu khác, mô-đun Python tương ứng với DB-API sẽ phải được cài đặt với sự trợ giúp của tiện ích pip. Ví dụ, để sử dụng cơ sở dữ liệu MySQL, chúng ta cần cài đặt mô-đun PyMySQL.
pip install pymysql
Các bước sau được đề xuất trong DB-API -
Thiết lập kết nối với cơ sở dữ liệu bằng cách sử dụng connect() chức năng và lấy đối tượng kết nối.
Gọi cursor() phương thức kết nối đối tượng để lấy đối tượng con trỏ.
Tạo một chuỗi truy vấn tạo thành một câu lệnh SQL sẽ được thực thi.
Thực thi truy vấn mong muốn bằng cách gọi execute() phương pháp.
Đóng kết nối.
import sqlite3
db=sqlite3.connect('test.db')
Ở đây, db là đối tượng kết nối đại diện cho test.db. Lưu ý, cơ sở dữ liệu đó sẽ được tạo nếu nó chưa tồn tại. Đối tượng kết nối db có các phương thức sau:
Sr.No. | Phương pháp & Mô tả |
---|---|
1 | cursor(): Trả về một đối tượng Con trỏ sử dụng Kết nối này. |
2 | commit(): Cam kết rõ ràng mọi giao dịch đang chờ xử lý vào cơ sở dữ liệu. |
3 | rollback(): Phương thức tùy chọn này khiến giao dịch được quay trở lại điểm bắt đầu. |
4 | close(): Đóng kết nối với cơ sở dữ liệu vĩnh viễn. |
Một con trỏ hoạt động như một xử lý cho một truy vấn SQL nhất định cho phép truy xuất một hoặc nhiều hàng của kết quả. Đối tượng con trỏ được lấy từ kết nối để thực hiện các truy vấn SQL bằng cách sử dụng câu lệnh sau:
cur=db.cursor()
Đối tượng con trỏ có các phương thức sau được định nghĩa:
Sr.No | Phương pháp & Mô tả |
---|---|
1 | execute() Thực thi truy vấn SQL trong một tham số chuỗi. |
2 | executemany() Thực thi truy vấn SQL bằng cách sử dụng một tập hợp các tham số trong danh sách các bộ giá trị. |
3 | fetchone() Tìm nạp hàng tiếp theo từ tập kết quả truy vấn. |
4 | fetchall() Tìm nạp tất cả các hàng còn lại từ tập hợp kết quả truy vấn. |
5 | callproc() Gọi một thủ tục được lưu trữ. |
6 | close() Đóng đối tượng con trỏ. |
Đoạn mã sau tạo một bảng trong test.db: -
import sqlite3
db=sqlite3.connect('test.db')
cur =db.cursor()
cur.execute('''CREATE TABLE student (
StudentID INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT (20) NOT NULL,
age INTEGER,
marks REAL);''')
print ('table created successfully')
db.close()
Tính toàn vẹn dữ liệu mong muốn trong cơ sở dữ liệu đạt được bằng commit() và rollback()các phương thức của đối tượng kết nối. Chuỗi truy vấn SQL có thể có một truy vấn SQL không chính xác có thể tạo ra một ngoại lệ, cần được xử lý đúng cách. Vì vậy, câu lệnh execute () được đặt trong khối try Nếu nó thành công, kết quả được lưu liên tục bằng phương thức commit (). Nếu truy vấn không thành công, giao dịch sẽ được hoàn tác bằng phương thức rollback ().
Mã sau thực hiện truy vấn CHÈN trên bảng sinh viên trong test.db.
import sqlite3
db=sqlite3.connect('test.db')
qry="insert into student (name, age, marks) values('Abbas', 20, 80);"
try:
cur=db.cursor()
cur.execute(qry)
db.commit()
print ("record added successfully")
except:
print ("error in query")
db.rollback()
db.close()
Nếu bạn muốn dữ liệu trong mệnh đề giá trị của truy vấn INSERT được cung cấp động bởi đầu vào của người dùng, hãy sử dụng thay thế tham số như được khuyến nghị trong Python DB-API. Các ? ký tự được sử dụng như một trình giữ chỗ trong chuỗi truy vấn và cung cấp các giá trị dưới dạng một bộ giá trị trong phương thức execute (). Ví dụ sau đây chèn một bản ghi bằng phương pháp thay thế tham số. Tên, tuổi và nhãn hiệu được lấy làm đầu vào.
import sqlite3
db=sqlite3.connect('test.db')
nm=input('enter name')
a=int(input('enter age'))
m=int(input('enter marks'))
qry="insert into student (name, age, marks) values(?,?,?);"
try:
cur=db.cursor()
cur.execute(qry, (nm,a,m))
db.commit()
print ("one record added successfully")
except:
print("error in operation")
db.rollback()
db.close()
Mô-đun sqlite3 xác định executemany()phương pháp có thể thêm nhiều bản ghi cùng một lúc. Dữ liệu được thêm vào phải được cung cấp trong một danh sách các bộ, với mỗi bộ chứa một bản ghi. Đối tượng danh sách là tham số của phương thức thực thi () cùng với chuỗi truy vấn. Tuy nhiên, phương thức executeutemany () không được hỗ trợ bởi một số mô-đun khác.
Các UPDATEtruy vấn thường chứa một biểu thức logic được chỉ định bởi mệnh đề WHERE Chuỗi truy vấn trong phương thức execute () phải chứa cú pháp truy vấn CẬP NHẬT. Để cập nhật giá trị của 'age' thành 23 cho name = 'Anil', hãy xác định chuỗi như sau:
qry="update student set age=23 where name='Anil';"
Để làm cho quá trình cập nhật năng động hơn, chúng tôi sử dụng phương pháp thay thế tham số như mô tả ở trên.
import sqlite3
db=sqlite3.connect('test.db')
nm=input(‘enter name’)
a=int(input(‘enter age’))
qry="update student set age=? where name=?;"
try:
cur=db.cursor()
cur.execute(qry, (a, nm))
db.commit()
print("record updated successfully")
except:
print("error in query")
db.rollback()
db.close()
Tương tự, hoạt động DELETE được thực hiện bằng cách gọi phương thức execute () với một chuỗi có cú pháp truy vấn DELETE của SQL. Tình cờ,DELETE truy vấn cũng thường chứa một WHERE mệnh đề.
import sqlite3
db=sqlite3.connect('test.db')
nm=input(‘enter name’)
qry="DELETE from student where name=?;"
try:
cur=db.cursor()
cur.execute(qry, (nm,))
db.commit()
print("record deleted successfully")
except:
print("error in operation")
db.rollback()
db.close()
Một trong những thao tác quan trọng trên bảng cơ sở dữ liệu là truy xuất các bản ghi từ nó. SQL cung cấpSELECTtruy vấn cho mục đích. Khi một chuỗi chứa cú pháp truy vấn SELECT được cấp cho phương thức execute (), một đối tượng tập kết quả sẽ được trả về. Có hai phương thức quan trọng với một đối tượng con trỏ bằng cách sử dụng một hoặc nhiều bản ghi từ tập kết quả có thể được truy xuất.
fetchone ()
Tìm nạp bản ghi có sẵn tiếp theo từ tập kết quả. Nó là một bộ dữ liệu bao gồm các giá trị của mỗi cột của bản ghi được tìm nạp.
fetchall ()
Tìm nạp tất cả các bản ghi còn lại dưới dạng danh sách các bộ giá trị. Mỗi bộ tương ứng với một bản ghi và chứa các giá trị của mỗi cột trong bảng.
Ví dụ sau liệt kê tất cả các bản ghi trong bảng sinh viên
import sqlite3
db=sqlite3.connect('test.db')
37
sql="SELECT * from student;"
cur=db.cursor()
cur.execute(sql)
while True:
record=cur.fetchone()
if record==None:
break
print (record)
db.close()
Nếu bạn định sử dụng cơ sở dữ liệu MySQL thay vì cơ sở dữ liệu SQLite, bạn cần cài đặt PyMySQLnhư mô tả ở trên. Tất cả các bước trong quy trình kết nối cơ sở dữ liệu đều giống nhau, vì cơ sở dữ liệu MySQL được cài đặt trên máy chủ nên hàm connect () cần URL và thông tin đăng nhập.
import pymysql
con=pymysql.connect('localhost', 'root', '***')
Chỉ có điều có thể khác với SQLite là các kiểu dữ liệu cụ thể của MySQL. Tương tự, bất kỳ cơ sở dữ liệu tương thích ODBC nào cũng có thể được sử dụng với Python bằng cách cài đặt mô-đun pyodbc.
Bất kỳ cơ sở dữ liệu quan hệ nào cũng chứa dữ liệu trong các bảng. Cấu trúc bảng xác định kiểu dữ liệu của các thuộc tính về cơ bản chỉ thuộc kiểu dữ liệu chính được ánh xạ tới các kiểu dữ liệu tích hợp sẵn tương ứng của Python. Tuy nhiên, các đối tượng do người dùng định nghĩa của Python không thể được lưu trữ và truy xuất liên tục đến / từ các bảng SQL.
Đây là sự khác biệt giữa các kiểu SQL và các ngôn ngữ lập trình hướng đối tượng như Python. SQL không có kiểu dữ liệu tương đương cho những người khác như dict, tuple, list hoặc bất kỳ lớp nào do người dùng xác định.
Nếu bạn phải lưu trữ một đối tượng trong cơ sở dữ liệu quan hệ, thì các thuộc tính phiên bản của nó phải được giải cấu trúc thành các kiểu dữ liệu SQL trước, trước khi thực hiện truy vấn INSERT. Mặt khác, dữ liệu được truy xuất từ bảng SQL thuộc kiểu chính. Một đối tượng Python có kiểu mong muốn sẽ phải được xây dựng bằng cách sử dụng để sử dụng trong tập lệnh Python. Đây là nơi mà Trình lập bản đồ quan hệ đối tượng rất hữu ích.
Bản đồ quan hệ đối tượng (ORM)
An Object Relation Mapper(ORM) là một giao diện giữa một lớp và một bảng SQL. Một lớp Python được ánh xạ tới một bảng nhất định trong cơ sở dữ liệu, để việc chuyển đổi giữa các kiểu đối tượng và SQL được tự động thực hiện.
Lớp Học sinh được viết bằng mã Python được ánh xạ tới bảng Học sinh trong cơ sở dữ liệu. Kết quả là, tất cả các hoạt động CRUD được thực hiện bằng cách gọi các phương thức tương ứng của lớp. Điều này giúp loại bỏ nhu cầu thực thi các truy vấn SQL được mã hóa cứng trong tập lệnh Python.
Do đó, thư viện ORM hoạt động như một lớp trừu tượng trên các truy vấn SQL thô và có thể giúp ích trong việc phát triển ứng dụng nhanh chóng. SQLAlchemylà một trình ánh xạ quan hệ đối tượng phổ biến cho Python. Mọi thao tác về trạng thái của đối tượng mô hình đều được đồng bộ hóa với hàng liên quan của nó trong bảng cơ sở dữ liệu.
Thư viện SQLALchemy bao gồm ORM API và Ngôn ngữ biểu thức SQL (SQLAlchemy Core). Ngôn ngữ biểu thức thực thi trực tiếp các cấu trúc nguyên thủy của cơ sở dữ liệu quan hệ.
ORM là một kiểu sử dụng cấp cao và trừu tượng được xây dựng trên ngôn ngữ biểu thức SQL. Có thể nói ORM là một cách sử dụng được áp dụng của Ngôn ngữ biểu hiện. Chúng ta sẽ thảo luận về API SQLAlchemy ORM và sử dụng cơ sở dữ liệu SQLite trong chủ đề này.
SQLAlchemy giao tiếp với nhiều loại cơ sở dữ liệu khác nhau thông qua các triển khai DBAPI tương ứng của chúng bằng cách sử dụng hệ thống phương ngữ. Tất cả các phương ngữ đều yêu cầu phải cài đặt trình điều khiển DBAPI thích hợp. Các phương ngữ cho loại cơ sở dữ liệu sau được bao gồm:
- Firebird
- Microsoft SQL Server
- MySQL
- Oracle
- PostgreSQL
- SQLite
- Sybase
Cài đặt SQLAlchemy rất dễ dàng và đơn giản, sử dụng tiện ích pip.
pip install sqlalchemy
Để kiểm tra xem SQLalchemy có được cài đặt đúng cách hay không và phiên bản của nó, hãy nhập thông tin sau trên lời nhắc Python:
>>> import sqlalchemy
>>>sqlalchemy.__version__
'1.3.11'
Tương tác với cơ sở dữ liệu được thực hiện thông qua đối tượng Engine thu được dưới dạng giá trị trả về create_engine() chức năng.
engine =create_engine('sqlite:///mydb.sqlite')
SQLite cho phép tạo cơ sở dữ liệu trong bộ nhớ. Công cụ SQLAlchemy cho cơ sở dữ liệu trong bộ nhớ được tạo như sau:
from sqlalchemy import create_engine
engine=create_engine('sqlite:///:memory:')
Nếu bạn định sử dụng cơ sở dữ liệu MySQL thay thế, hãy sử dụng mô-đun DB-API của nó - pymysql và trình điều khiển phương ngữ tương ứng.
engine = create_engine('mysql+pymydsql://root@localhost/mydb')
Create_engine có một đối số echo tùy chọn. Nếu được đặt thành true, các truy vấn SQL do engine tạo ra sẽ được lặp lại trên thiết bị đầu cuối.
SQLAlchemy chứa declarative baselớp học. Nó hoạt động như một danh mục các lớp mô hình và các bảng được ánh xạ.
from sqlalchemy.ext.declarative import declarative_base
base=declarative_base()
Bước tiếp theo là xác định một lớp mô hình. Nó phải được dẫn xuất từ cơ sở - đối tượng của lớp explore_base như trên.
Bộ __tablename__ thuộc tính tên của bảng mà bạn muốn được tạo trong cơ sở dữ liệu. Các thuộc tính khác tương ứng với các trường. Mỗi cái là một đối tượng Cột trong SQLAlchemy và kiểu dữ liệu của nó là từ một trong danh sách bên dưới:
- BigInteger
- Boolean
- Date
- DateTime
- Float
- Integer
- Numeric
- SmallInteger
- String
- Text
- Time
Mã sau là lớp mô hình có tên là Sinh viên được ánh xạ tới bảng Sinh viên.
#myclasses.py
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Numeric
base=declarative_base()
class Student(base):
__tablename__='Students'
StudentID=Column(Integer, primary_key=True)
name=Column(String)
age=Column(Integer)
marks=Column(Numeric)
Để tạo bảng Sinh viên có cấu trúc tương ứng, hãy thực thi phương thức create_all () được định nghĩa cho lớp cơ sở.
base.metadata.create_all(engine)
Bây giờ chúng ta phải khai báo một đối tượng của lớp Sinh viên của chúng ta. Tất cả các giao dịch cơ sở dữ liệu như thêm, xóa hoặc truy xuất dữ liệu từ cơ sở dữ liệu, v.v., được xử lý bởi một đối tượng Session.
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
sessionobj = Session()
Dữ liệu được lưu trữ trong đối tượng Student được thêm vào bảng bên dưới bằng phương thức add () của phiên.
s1 = Student(name='Juhi', age=25, marks=200)
sessionobj.add(s1)
sessionobj.commit()
Đây, là toàn bộ mã để thêm bản ghi trong bảng sinh viên. Khi nó được thực thi, nhật ký câu lệnh SQL tương ứng được hiển thị trên bảng điều khiển.
from sqlalchemy import Column, Integer, String
from sqlalchemy import create_engine
from myclasses import Student, base
engine = create_engine('sqlite:///college.db', echo=True)
base.metadata.create_all(engine)
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
sessionobj = Session()
s1 = Student(name='Juhi', age=25, marks=200)
sessionobj.add(s1)
sessionobj.commit()
Đầu ra bảng điều khiển
CREATE TABLE "Students" (
"StudentID" INTEGER NOT NULL,
name VARCHAR,
age INTEGER,
marks NUMERIC,
PRIMARY KEY ("StudentID")
)
INFO sqlalchemy.engine.base.Engine ()
INFO sqlalchemy.engine.base.Engine COMMIT
INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
INFO sqlalchemy.engine.base.Engine INSERT INTO "Students" (name, age, marks) VALUES (?, ?, ?)
INFO sqlalchemy.engine.base.Engine ('Juhi', 25, 200.0)
INFO sqlalchemy.engine.base.Engine COMMIT
Các session đối tượng cũng cung cấp phương thức add_all () để chèn nhiều đối tượng trong một giao dịch.
sessionobj.add_all([s2,s3,s4,s5])
sessionobj.commit()
Bây giờ, các bản ghi được thêm vào bảng, chúng tôi muốn tìm nạp từ nó giống như truy vấn SELECT. Đối tượng phiên có phương thức query () để thực hiện tác vụ. Đối tượng truy vấn được trả về bằng phương thức query () trên mô hình Sinh viên của chúng tôi.
qry=seesionobj.query(Student)
Sử dụng phương thức get () của đối tượng Truy vấn này tìm nạp đối tượng tương ứng với khóa chính đã cho.
S1=qry.get(1)
Trong khi câu lệnh này được thực thi, câu lệnh SQL tương ứng của nó được lặp lại trên bảng điều khiển sẽ như sau:
BEGIN (implicit)
SELECT "Students"."StudentID" AS "Students_StudentID", "Students".name AS
"Students_name", "Students".age AS "Students_age",
"Students".marks AS "Students_marks"
FROM "Students"
WHERE "Products"."Students" = ?
sqlalchemy.engine.base.Engine (1,)
Phương thức query.all () trả về danh sách tất cả các đối tượng có thể được duyệt qua bằng một vòng lặp.
from sqlalchemy import Column, Integer, String, Numeric
from sqlalchemy import create_engine
from myclasses import Student,base
engine = create_engine('sqlite:///college.db', echo=True)
base.metadata.create_all(engine)
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)
sessionobj = Session()
qry=sessionobj.query(Students)
rows=qry.all()
for row in rows:
print (row)
Cập nhật bản ghi trong bảng được ánh xạ là rất dễ dàng. Tất cả những gì bạn phải làm là tìm nạp một bản ghi bằng phương thức get (), gán một giá trị mới cho thuộc tính mong muốn và sau đó thực hiện các thay đổi bằng đối tượng phiên. Dưới đây chúng tôi đổi điểm của học sinh Juhi thành 100.
S1=qry.get(1)
S1.marks=100
sessionobj.commit()
Xóa bản ghi cũng dễ dàng như vậy, bằng cách xóa đối tượng mong muốn khỏi phiên.
S1=qry.get(1)
Sessionobj.delete(S1)
sessionobj.commit()
MongoDB là một tài liệu hướng NoSQLcơ sở dữ liệu. Nó là một cơ sở dữ liệu đa nền tảng được phân phối theo giấy phép công khai phía máy chủ. Nó sử dụng JSON giống như các tài liệu dưới dạng lược đồ.
Để cung cấp khả năng lưu trữ dữ liệu khổng lồ, nhiều hơn một máy chủ vật lý (được gọi là phân đoạn) được kết nối với nhau để đạt được khả năng mở rộng theo chiều ngang. Cơ sở dữ liệu MongoDB bao gồm các tài liệu.
Một tài liệu tương tự như một hàng trong bảng cơ sở dữ liệu quan hệ. Tuy nhiên, nó không có một lược đồ cụ thể. Tài liệu là tập hợp các cặp khóa-giá trị - tương tự như từ điển. Tuy nhiên, số lượng cặp kv trong mỗi tài liệu có thể khác nhau. Cũng giống như một bảng trong cơ sở dữ liệu quan hệ có khóa chính, tài liệu trong cơ sở dữ liệu MongoDB có một khóa đặc biệt được gọi là"_id".
Trước khi chúng ta xem cơ sở dữ liệu MongoDB được sử dụng như thế nào với Python, chúng ta hãy hiểu sơ qua về cách cài đặt và khởi động MongoDB. Phiên bản cộng đồng và thương mại của MongoDB có sẵn. Phiên bản cộng đồng có thể được tải xuống từ www.mongodb.com/download-center/community .
Giả sử rằng MongoDB được cài đặt trong c: \ mongodb, máy chủ có thể được gọi bằng lệnh sau.
c:\mongodb\bin>mongod
Máy chủ MongoDB đang hoạt động ở cổng số 22017 theo mặc định. Cơ sở dữ liệu được lưu trữ trong thư mục data / bin theo mặc định, mặc dù vị trí có thể được thay đổi bằng tùy chọn –dbpath.
MongoDB có một bộ lệnh riêng được sử dụng trong MongoDB shell. Để gọi shell, hãy sử dụngMongo chỉ huy.
x:\mongodb\bin>mongo
Một dấu nhắc shell tương tự như MySQL hoặc SQLite shell, xuất hiện trước khi các lệnh NoSQL gốc có thể được thực thi. Tuy nhiên, chúng tôi quan tâm đến việc kết nối cơ sở dữ liệu MongoDB với Python.
PyMongomô-đun đã được phát triển bởi chính MongoDB Inc để cung cấp giao diện lập trình Python. Sử dụng tiện ích pip nổi tiếng để cài đặt PyMongo.
pip3 install pymongo
Giả sử rằng máy chủ MongoDB đang hoạt động (với mongod lệnh) và đang nghe ở cổng 22017, trước tiên chúng ta cần khai báo MongoClientvật. Nó kiểm soát tất cả các giao dịch giữa phiên Python và cơ sở dữ liệu.
from pymongo import MongoClient
client=MongoClient()
Sử dụng đối tượng máy khách này để thiết lập kết nối với máy chủ MongoDB.
client = MongoClient('localhost', 27017)
Một cơ sở dữ liệu mới được tạo bằng lệnh sau.
db=client.newdb
Cơ sở dữ liệu MongoDB có thể có nhiều tập hợp, tương tự như các bảng trong cơ sở dữ liệu quan hệ. Một đối tượng Collection được tạo bởiCreate_collection() chức năng.
db.create_collection('students')
Bây giờ, chúng ta có thể thêm một hoặc nhiều tài liệu trong bộ sưu tập như sau:
from pymongo import MongoClient
client=MongoClient()
db=client.newdb
db.create_collection("students")
student=db['students']
studentlist=[{'studentID':1,'Name':'Juhi','age':20, 'marks'=100},
{'studentID':2,'Name':'dilip','age':20, 'marks'=110},
{'studentID':3,'Name':'jeevan','age':24, 'marks'=145}]
student.insert_many(studentlist)
client.close()
Để truy xuất các tài liệu (tương tự như truy vấn SELECT), chúng ta nên sử dụng find()phương pháp. Nó trả về một con trỏ với sự trợ giúp của tất cả các tài liệu có thể lấy được.
students=db['students']
docs=students.find()
for doc in docs:
print (doc['Name'], doc['age'], doc['marks'] )
Để tìm một tài liệu cụ thể thay vì tất cả chúng trong một bộ sưu tập, chúng ta cần áp dụng phương thức filter to find (). Bộ lọc sử dụng các toán tử logic. MongoDB có tập hợp các toán tử logic của riêng nó như sau:
Sr.No | Toán tử MongoDB & Toán tử logic truyền thống |
---|---|
1 | $eq bằng (==) |
2 | $gt lớn hơn (>) |
3 | $gte lớn hơn hoặc bằng (> =) |
4 | $in nếu bằng bất kỳ giá trị nào trong mảng |
5 | $lt nhỏ hơn (<) |
6 | $lte nhỏ hơn hoặc bằng (<=) |
7 | $ne không bằng (! =) |
số 8 | $nin nếu không bằng bất kỳ giá trị nào trong mảng |
Ví dụ: chúng tôi quan tâm đến việc lấy danh sách các sinh viên trên 21 tuổi. Sử dụng toán tử $ gt trong bộ lọc chofind() phương pháp như sau -
students=db['students']
docs=students.find({'age':{'$gt':21}})
for doc in docs:
print (doc.get('Name'), doc.get('age'), doc.get('marks'))
Mô-đun PyMongo cung cấp update_one() và update_many() các phương pháp sửa đổi một tài liệu hoặc nhiều tài liệu đáp ứng một biểu thức lọc cụ thể.
Hãy để chúng tôi cập nhật thuộc tính dấu của một tài liệu có tên là Juhi.
from pymongo import MongoClient
client=MongoClient()
db=client.newdb
doc=db.students.find_one({'Name': 'Juhi'})
db['students'].update_one({'Name': 'Juhi'},{"$set":{'marks':150}})
client.close()
Cassandra là một cơ sở dữ liệu NoSQL phổ biến khác. Khả năng mở rộng, tính nhất quán và khả năng chịu lỗi cao - đây là một số tính năng quan trọng của Cassandra. Đây làColumn storecơ sở dữ liệu. Dữ liệu được lưu trữ trên nhiều máy chủ hàng hóa. Kết quả là, dữ liệu có sẵn rất cao.
Cassandra là một sản phẩm từ nền tảng Apache Software. Dữ liệu được lưu trữ theo cách phân tán trên nhiều nút. Mỗi nút là một máy chủ duy nhất bao gồm các không gian phím. Khối xây dựng cơ bản của cơ sở dữ liệu Cassandra làkeyspace có thể được coi là tương tự với cơ sở dữ liệu.
Dữ liệu trong một nút của Cassandra, được sao chép ở các nút khác qua mạng ngang hàng gồm các nút. Điều đó làm cho Cassandra trở thành một cơ sở dữ liệu tuyệt vời. Mạng được gọi là trung tâm dữ liệu. Nhiều trung tâm dữ liệu có thể được kết nối với nhau để tạo thành một cụm. Bản chất của sao chép được cấu hình bằng cách thiết lập Chiến lược sao chép và hệ số sao chép tại thời điểm tạo không gian khóa.
Một không gian khóa có thể có nhiều hơn một họ Cột - cũng giống như một cơ sở dữ liệu có thể chứa nhiều bảng. Không gian khóa của Cassandra không có một lược đồ xác định trước. Có thể mỗi hàng trong bảng Cassandra có thể có các cột có tên khác nhau và có số lượng biến.
Phần mềm Cassandra cũng có sẵn trong hai phiên bản: cộng đồng và doanh nghiệp. Phiên bản doanh nghiệp mới nhất của Cassandra có sẵn để tải xuống tạihttps://cassandra.apache.org/download/. Phiên bản cộng đồng được tìm thấy tạihttps://academy.datastax.com/planet-cassandra/cassandra.
Cassandra có ngôn ngữ truy vấn riêng được gọi là Cassandra Query Language (CQL). Các truy vấn CQL có thể được thực thi từ bên trong trình bao CQLASH - tương tự như trình bao MySQL hoặc SQLite. Cú pháp CQL xuất hiện tương tự như SQL tiêu chuẩn.
Phiên bản cộng đồng Datastax, cũng đi kèm với IDE Develcenter được hiển thị trong hình sau:
Mô-đun Python để làm việc với cơ sở dữ liệu Cassandra được gọi là Cassandra Driver. Nó cũng được phát triển bởi Apache foundation. Mô-đun này chứa API ORM, cũng như API cốt lõi về bản chất tương tự như DB-API dành cho cơ sở dữ liệu quan hệ.
Dễ dàng cài đặt trình điều khiển Cassandra bằng cách sử dụng pip utility.
pip3 install cassandra-driver
Tương tác với cơ sở dữ liệu Cassandra, được thực hiện thông qua đối tượng Cluster. Mô-đun Cassandra.cluster định nghĩa lớp Cụm. Đầu tiên chúng ta cần khai báo đối tượng Cluster.
from cassandra.cluster import Cluster
clstr=Cluster()
Tất cả các giao dịch như chèn / cập nhật, v.v., được thực hiện bằng cách bắt đầu một phiên với một không gian khóa.
session=clstr.connect()
Để tạo một keyspace mới, hãy sử dụng execute()phương thức của đối tượng phiên. Phương thức execute () nhận đối số chuỗi phải là một chuỗi truy vấn. CQL có câu lệnh CREATE KEYSPACE như sau. Mã hoàn chỉnh như dưới đây -
from cassandra.cluster import Cluster
clstr=Cluster()
session=clstr.connect()
session.execute(“create keyspace mykeyspace with replication={
'class': 'SimpleStrategy', 'replication_factor' : 3
};”
Đây, SimpleStrategy là một giá trị cho replication strategy và replication factorđược đặt thành 3. Như đã đề cập trước đó, một keyspace chứa một hoặc nhiều bảng. Mỗi bảng được đặc trưng bởi kiểu dữ liệu của nó. Các kiểu dữ liệu Python được tự động phân tích cú pháp với các kiểu dữ liệu CQL tương ứng theo bảng sau:
Loại Python | Loại CQL |
---|---|
không ai | VÔ GIÁ TRỊ |
Bool | Boolean |
Phao nổi | phao, gấp đôi |
int, dài | int, bigint, varint, smallint, tinyint, counter |
thập phân. thập phân | Thập phân |
str, Unicode | ascii, varchar, văn bản |
bộ đệm, bytearray | Bãi |
Ngày | Ngày |
Ngày giờ | Dấu thời gian |
Thời gian | Thời gian |
danh sách, tuple, máy phát điện | Danh sách |
thiết lập, băng giá | Bộ |
dict, OrderDict | Bản đồ |
uuid.UUID | timeuuid, uuid |
Để tạo bảng, hãy sử dụng đối tượng phiên để thực hiện truy vấn CQL để tạo bảng.
from cassandra.cluster import Cluster
clstr=Cluster()
session=clstr.connect('mykeyspace')
qry= '''
create table students (
studentID int,
name text,
age int,
marks int,
primary key(studentID)
);'''
session.execute(qry)
Không gian phím được tạo có thể được sử dụng thêm để chèn hàng. Phiên bản CQL của truy vấn INSERT tương tự như câu lệnh SQL Insert. Mã sau sẽ chèn một hàng trong bảng sinh viên.
from cassandra.cluster import Cluster
clstr=Cluster()
session=clstr.connect('mykeyspace')
session.execute("insert into students (studentID, name, age, marks) values
(1, 'Juhi',20, 200);"
Như bạn mong đợi, câu lệnh SELECT cũng được sử dụng với Cassandra. Trong trường hợp phương thức execute () chứa chuỗi truy vấn SELECT, nó trả về một đối tượng tập kết quả có thể được duyệt qua bằng vòng lặp.
from cassandra.cluster import Cluster
clstr=Cluster()
session=clstr.connect('mykeyspace')
rows=session.execute("select * from students;")
for row in rows:
print (StudentID: {} Name:{} Age:{} price:{} Marks:{}'
.format(row[0],row[1], row[2], row[3]))
Truy vấn SELECT của Cassandra hỗ trợ sử dụng mệnh đề WHERE để áp dụng bộ lọc trên tập kết quả được tìm nạp. Các toán tử logic truyền thống như <,> ==, v.v. được công nhận. Để truy xuất, chỉ những hàng từ bảng sinh viên cho các tên có tuổi> 20, chuỗi truy vấn trong phương thức execute () phải như sau:
rows=session.execute("select * from students WHERE age>20 allow filtering;")
Lưu ý, việc sử dụng ALLOW FILTERING. Phần CHO PHÉP LỌC của câu lệnh này cho phép cho phép rõ ràng (một số) truy vấn yêu cầu lọc.
API trình điều khiển Cassandra xác định các lớp sau của loại Statement trong mô-đun cassendra.query của nó.
Câu lệnh đơn giản
Một truy vấn CQL đơn giản, chưa chuẩn bị được chứa trong một chuỗi truy vấn. Tất cả các ví dụ trên là ví dụ của SimpleStatement.
BatchStatement
Nhiều truy vấn (chẳng hạn như CHÈN, CẬP NHẬT và XÓA) được đặt trong một lô và thực hiện cùng một lúc. Mỗi hàng đầu tiên được chuyển đổi thành một Câu lệnh đơn giản và sau đó được thêm vào trong một lô.
Chúng ta hãy đặt các hàng sẽ được thêm vào bảng Học sinh dưới dạng danh sách các bộ giá trị như sau:
studentlist=[(1,'Juhi',20,100), ('2,'dilip',20, 110),(3,'jeevan',24,145)]
Để thêm các hàng trên bằng BathStatement, hãy chạy tập lệnh sau:
from cassandra.query import SimpleStatement, BatchStatement
batch=BatchStatement()
for student in studentlist:
batch.add(SimpleStatement("INSERT INTO students
(studentID, name, age, marks) VALUES
(%s, %s, %s %s)"), (student[0], student[1],student[2], student[3]))
session.execute(batch)
Chuẩn bị sẵn sàng
Câu lệnh chuẩn bị giống như một truy vấn được tham số hóa trong DB-API. Chuỗi truy vấn của nó được Cassandra lưu lại để sử dụng sau này. Phương thức Session.prepare () trả về một thể hiện PreparedStatement.
Đối với bảng sinh viên của chúng tôi, câu hỏi Chuẩn bị sẵn sàng cho truy vấn CHÈN như sau:
stmt=session.prepare("INSERT INTO students (studentID, name, age, marks) VALUES (?,?,?)")
Sau đó, nó chỉ cần gửi các giá trị của các tham số để ràng buộc. Ví dụ -
qry=stmt.bind([1,'Ram', 23,175])
Cuối cùng, thực hiện câu lệnh ràng buộc ở trên.
session.execute(qry)
Điều này làm giảm lưu lượng mạng và việc sử dụng CPU vì Cassandra không phải phân tích lại truy vấn mỗi lần.
ZODB (Zope object Database) là cơ sở dữ liệu để lưu trữ các đối tượng Python. Nó tuân thủ ACID - tính năng không có trong cơ sở dữ liệu NOSQL. ZODB cũng là mã nguồn mở, có thể mở rộng theo chiều ngang và không có lược đồ, giống như nhiều cơ sở dữ liệu NoSQL. Tuy nhiên, nó không được phân phối và không dễ dàng sao chép. Nó cung cấp cơ chế bền bỉ cho các đối tượng Python. Nó là một phần của máy chủ Ứng dụng Zope, nhưng cũng có thể được sử dụng độc lập.
ZODB được tạo ra bởi Jim Fulton của Zope Corporation. Nó bắt đầu như một Hệ thống đối tượng liên tục đơn giản. Phiên bản hiện tại của nó là 5.5.0 và được viết hoàn toàn bằng Python. bằng cách sử dụng phiên bản mở rộng của tính kiên trì đối tượng tích hợp sẵn của Python (pickle).
Một số tính năng chính của ZODB là:
- transactions
- history/undo
- bộ nhớ có thể cắm được trong suốt
- bộ nhớ đệm tích hợp
- kiểm soát đồng thời đa vũ trụ (MVCC)
- khả năng mở rộng trên mạng
ZODB là một hierarchicalcơ sở dữ liệu. Có một đối tượng gốc, được khởi tạo khi một cơ sở dữ liệu được tạo. Đối tượng gốc được sử dụng giống như một từ điển Python và nó có thể chứa các đối tượng khác (có thể giống như từ điển). Để lưu trữ một đối tượng trong cơ sở dữ liệu, chỉ cần gán nó vào một khóa mới bên trong vùng chứa là đủ.
ZODB hữu ích cho các ứng dụng mà dữ liệu được phân cấp và có khả năng đọc nhiều hơn ghi. ZODB là một phần mở rộng của đối tượng dưa chua. Đó là lý do tại sao nó chỉ có thể được xử lý thông qua tập lệnh Python.
Để cài đặt phiên bản mới nhất của ZODB, hãy sử dụng tiện ích pip -
pip install zodb
Các phần phụ thuộc sau cũng được cài đặt:
- BTrees==4.6.1
- cffi==1.13.2
- persistent==4.5.1
- pycparser==2.19
- six==1.13.0
- transaction==2.4.0
ZODB cung cấp các tùy chọn lưu trữ sau:
Lưu trữ tập tin
Đây là mặc định. Mọi thứ được lưu trữ trong một tệp Data.fs lớn, về cơ bản là một nhật ký giao dịch.
DirectoryStorage
Điều này lưu trữ một tệp cho mỗi bản sửa đổi đối tượng. Trong trường hợp này, nó không yêu cầu Data.fs.index phải được xây dựng lại khi tắt máy không sạch.
RelStorage
Điều này lưu trữ dưa chua trong một cơ sở dữ liệu quan hệ. PostgreSQL, MySQL và Oracle được hỗ trợ.
Để tạo cơ sở dữ liệu ZODB, chúng ta cần một bộ nhớ, một cơ sở dữ liệu và cuối cùng là một kết nối.
Bước đầu tiên là có đối tượng lưu trữ.
import ZODB, ZODB.FileStorage
storage = ZODB.FileStorage.FileStorage('mydata.fs')
Lớp DB sử dụng đối tượng lưu trữ này để lấy đối tượng cơ sở dữ liệu.
db = ZODB.DB(storage)
Truyền Không có cho phương thức khởi tạo DB để tạo cơ sở dữ liệu trong bộ nhớ.
Db=ZODB.DB(None)
Cuối cùng, chúng tôi thiết lập kết nối với cơ sở dữ liệu.
conn=db.open()
Đối tượng kết nối sau đó cung cấp cho bạn quyền truy cập vào 'gốc' của cơ sở dữ liệu bằng phương thức 'root ()'. Đối tượng 'gốc' là từ điển chứa tất cả các đối tượng liên tục của bạn.
root = conn.root()
Ví dụ: chúng tôi thêm danh sách sinh viên vào đối tượng gốc như sau:
root['students'] = ['Mary', 'Maya', 'Meet']
Thay đổi này không được lưu vĩnh viễn trong cơ sở dữ liệu cho đến khi chúng tôi thực hiện giao dịch.
import transaction
transaction.commit()
Để lưu trữ đối tượng của một lớp do người dùng xác định, lớp đó phải được kế thừa từ lớp cha dai dẳng.Persiste.
Ưu điểm của Phân lớp
Lớp con Lớp bền vững có những ưu điểm như sau:
Cơ sở dữ liệu sẽ tự động theo dõi các thay đổi đối tượng được thực hiện bằng cách thiết lập các thuộc tính.
Dữ liệu sẽ được lưu trong bản ghi cơ sở dữ liệu của chính nó.
Bạn có thể lưu dữ liệu không thuộc lớp con Kiên trì, nhưng nó sẽ được lưu trữ trong bản ghi cơ sở dữ liệu của bất kỳ đối tượng liên tục nào tham chiếu đến nó. Các đối tượng không liên tục được sở hữu bởi đối tượng liên tục chứa của chúng và nếu nhiều đối tượng liên tục tham chiếu đến cùng một đối tượng không liên tục, chúng sẽ nhận được các bản sao của riêng chúng.
Hãy sử dụng xác định một lớp con của lớp sinh viên Lớp bền vững dưới dạng -
import persistent
class student(persistent.Persistent):
def __init__(self, name):
self.name = name
def __repr__(self):
return str(self.name)
Để thêm đối tượng của lớp này, trước tiên chúng ta hãy thiết lập kết nối như mô tả ở trên.
import ZODB, ZODB.FileStorage
storage = ZODB.FileStorage.FileStorage('studentdata.fs')
db = ZODB.DB(storage)
conn=db.open()
root = conn.root()
Khai báo đối tượng một phần bổ sung cho root và sau đó thực hiện giao dịch
s1=student("Akash")
root['s1']=s1
import transaction
transaction.commit()
conn.close()
Danh sách tất cả các đối tượng được thêm vào root có thể được truy xuất như một đối tượng dạng xem với sự trợ giúp của phương thức items () vì đối tượng gốc tương tự như được xây dựng trong từ điển.
print (root.items())
ItemsView({'s1': Akash})
Để tìm nạp thuộc tính của đối tượng cụ thể từ gốc,
print (root['s1'].name)
Akash
Đối tượng có thể được cập nhật dễ dàng. Vì ZODB API là một gói Python thuần túy, nó không yêu cầu sử dụng bất kỳ ngôn ngữ kiểu SQL bên ngoài nào.
root['s1'].name='Abhishek'
import transaction
transaction.commit()
Cơ sở dữ liệu sẽ được cập nhật ngay lập tức. Lưu ý rằng lớp giao dịch cũng định nghĩa hàm abort () tương tự như điều khiển giao dịch rollback () trong SQL.
Microsoft's Excel là ứng dụng bảng tính phổ biến nhất. Nó đã được sử dụng từ hơn 25 năm qua. Các phiên bản Excel sau này sử dụngOffice Open XML (OOXML) định dạng tệp. Do đó, có thể truy cập các tệp bảng tính thông qua các môi trường lập trình khác.
OOXMLlà một định dạng tệp tiêu chuẩn ECMA. Python'sopenpyxl gói cung cấp chức năng đọc / ghi tệp Excel với phần mở rộng .xlsx.
Gói openpyxl sử dụng danh pháp lớp tương tự như thuật ngữ Microsoft Excel. Tài liệu Excel được gọi là sổ làm việc và được lưu với phần mở rộng .xlsx trong hệ thống tệp. Một sổ làm việc có thể có nhiều trang tính. Trang tính trình bày một lưới lớn các ô, mỗi ô có thể lưu trữ giá trị hoặc công thức. Các hàng và cột tạo thành lưới được đánh số. Các cột được xác định bằng bảng chữ cái, A, B, C,…., Z, AA, AB, v.v. Các hàng được đánh số bắt đầu từ 1.
Một bảng tính Excel điển hình xuất hiện như sau:
Tiện ích pip đủ tốt để cài đặt gói openpyxl.
pip install openpyxl
Lớp Workbook đại diện cho một sổ làm việc trống với một trang tính trống. Chúng tôi cần kích hoạt nó để một số dữ liệu có thể được thêm vào trang tính.
from openpyxl import Workbook
wb=Workbook()
sheet1=wb.active
sheet1.title='StudentList'
Như chúng ta đã biết, một ô trong trang tính được đặt tên là định dạng ColumnNameRownumber. Theo đó, ô trên cùng bên trái là A1. Chúng tôi gán một chuỗi cho ô này là -
sheet1['A1']= 'Student List'
Ngoài ra, hãy sử dụng trang tính của cell()phương pháp sử dụng số hàng và cột để xác định một ô. Gọi thuộc tính giá trị đến đối tượng ô để gán giá trị.
cell1=sheet1.cell(row=1, column=1)
cell1.value='Student List'
Sau khi điền trang tính với dữ liệu, sổ làm việc được lưu bằng cách gọi phương thức save () của đối tượng sổ làm việc.
wb.save('Student.xlsx')
Tệp sổ làm việc này được tạo trong thư mục làm việc hiện tại.
Tập lệnh Python sau đây viết một danh sách các bộ giá trị vào một tài liệu sổ làm việc. Mỗi bộ lưu trữ số cuộn, tuổi và điểm của học sinh.
from openpyxl import Workbook
wb = Workbook()
sheet1 = wb.active
sheet1.title='Student List'
sheet1.cell(column=1, row=1).value='Student List'
studentlist=[('RollNo','Name', 'age', 'marks'),(1,'Juhi',20,100),
(2,'dilip',20, 110) , (3,'jeevan',24,145)]
for col in range(1,5):
for row in range(1,5):
sheet1.cell(column=col, row=1+row).value=studentlist[row-1][col-1]
wb.save('students.xlsx')
Sổ làm việc student.xlsx được lưu trong thư mục làm việc hiện tại. Nếu được mở bằng ứng dụng Excel, nó sẽ xuất hiện như bên dưới:
Mô-đun openpyxl cung cấp load_workbook() chức năng giúp đọc lại dữ liệu trong tài liệu sổ làm việc.
from openpyxl import load_workbook
wb=load_workbook('students.xlsx')
Bây giờ bạn có thể truy cập giá trị của bất kỳ ô nào được chỉ định theo số hàng và cột.
cell1=sheet1.cell(row=1, column=1)
print (cell1.value)
Student List
Thí dụ
Mã sau điền vào một danh sách với dữ liệu trang tính công việc.
from openpyxl import load_workbook
wb=load_workbook('students.xlsx')
sheet1 = wb['Student List']
studentlist=[]
for row in range(1,5):
stud=[]
for col in range(1,5):
val=sheet1.cell(column=col, row=1+row).value
stud.append(val)
studentlist.append(tuple(stud))
print (studentlist)
Đầu ra
[('RollNo', 'Name', 'age', 'marks'), (1, 'Juhi', 20, 100), (2, 'dilip', 20, 110), (3, 'jeevan', 24, 145)]
Một tính năng rất quan trọng của ứng dụng Excel là công thức. Để gán công thức cho một ô, hãy gán nó vào một chuỗi chứa cú pháp công thức của Excel. Gán hàm AVERAGE cho ô c6 có tuổi.
sheet1['C6']= 'AVERAGE(C3:C5)'
Mô-đun Openpyxl có Translate_formula()chức năng sao chép công thức trong một phạm vi. Chương trình sau định nghĩa hàm AVERAGE trong C6 và sao chép nó vào C7 để tính trung bình các điểm.
from openpyxl import load_workbook
wb=load_workbook('students.xlsx')
sheet1 = wb['Student List']
from openpyxl.formula.translate import Translator#copy formula
sheet1['B6']='Average'
sheet1['C6']='=AVERAGE(C3:C5)'
sheet1['D6'] = Translator('=AVERAGE(C3:C5)', origin="C6").translate_formula("D6")
wb.save('students.xlsx')
Trang tính đã thay đổi bây giờ xuất hiện như sau: