Database
Th.S Trần Đức Lợi
Pythonvietnam.info
Ôn tập bài cũ
• Ôn lại nội dung đã học về Class
• Chữa bài ConfigLoaderClass
PythonBeginnerClass @loitd
#pythonvietnam.info
Mục đích bài học
• Tìm hiểu về làm việc với Database trong
python
– Database introduction
– SQL
– MySQL
– Redis
PythonBeginnerClass @loitd
#pythonvietnam.info
Database
• Cơ sở dữ liệu là một tập hợp có tổ chức của
dữ liệu
• Để quản lý cơ sở dữ liệu ta cần DBMS
(Database Management System)
• Các cơ sở dữ liệu phổ biến: Oracle, MySQL,
SQLite, SQLServer, Postgres, …
PythonBeginnerClass @loitd
#pythonvietnam.info
Database
• 4 loại CSDL chính:
– Hierarchical
– Network
– Relational
– Object Relational
PythonBeginnerClass @loitd
#pythonvietnam.info
Database
• Lưu trữ thông tin về tất cả các thành viên
trong công ty, trường học, bệnh viện, …
• Relational DB:
– Employee table
– Department table
– Salary table
PythonBeginnerClass @loitd
#pythonvietnam.info
Database
• Database: chứa nhiều bảng
• Table: còn được gọi là Relation, bao gồm
tuples và attributes
• Tuple (row): Một tập hợp các trường đại diện
cho một phần tử
• Attribute (column, field): Một trường đại diện
cho một thuộc tính của các phần tử
PythonBeginnerClass @loitd
#pythonvietnam.info
Database
EMPLOYEE_ID FIRST_NAME LAST_NAME DEPT_ID EMAIL
1001 Loi Tran 99 loitd@pythonvi
etnam.info
1002 John Hei 98 john@pythonvi
etnam.info
PythonBeginnerClass @loitd
#pythonvietnam.info
Department_ID Dept_name Manager_ID
99 Kế Toán 1001
98 HT 1005
Database: Key
• Primary Key
– Định nghĩa một bản ghi duy nhất
– Phải là giá trị duy nhất
– Không thể chứa giá trị NULL
– Mỗi bảng đều nên có chỉ 1 primary key
• Foreign Key
– Trỏ tới một primary key của một bảng khác
PythonBeginnerClass @loitd
#pythonvietnam.info
Database: SQL
• Để query dữ liệu từ DB
• Structured query language
• Là ngôn ngữ tuân theo chuẩn ANSI thao tác
trên CSDL quan hệ (relational database)
PythonBeginnerClass @loitd
#pythonvietnam.info
SQL
• Query dữ liệu
• Thêm mới, sửa, xóa các dòng dữ liệu trong
bảng
• Tạo mới, thay thế, chỉnh sửa và drop các đối
tượng
• Quản lý truy nhập
PythonBeginnerClass @loitd
#pythonvietnam.info
SQL
• Data Manipulation Language
– Select
– Insert
– Update
– Delete
– Merge
• Data Definition Language
– Create
– Alter
– Drop
– Rename
– Truncate
– comment
PythonBeginnerClass @loitd
#pythonvietnam.info
SQL
• Data Control Language
– Grant
– Revoke
• Transaction Control
– Commit
– Rollback
– Savepoint
PythonBeginnerClass @loitd
#pythonvietnam.info
MySQL
• Open-source database
• Community Edition
• Standard Edition
• Enterprise Edition
• MySQL Cluster Carrier Grade Edition
PythonBeginnerClass @loitd
#pythonvietnam.info
MySQL
• Cài đặt:
– http://www.wampserver.com/en/
– https://www.apachefriends.org/index.html
– https://www.mamp.info/en/
PythonBeginnerClass @loitd
#pythonvietnam.info
SQL: Select
• Lấy dữ liệu từ DB
• Column alias
• Distinct keyword
• Select * | distinct | column | expression alias
from Table
PythonBeginnerClass @loitd
#pythonvietnam.info
SQL: where
• Giới hạn số lượng dữ liệu bằng điều kiện
• SELECT column,column
FROM table
WHERE column = value;
PythonBeginnerClass @loitd
#pythonvietnam.info
SQL: Update
• Cập nhật dữ liệu cho DB
• UPDATE table
SET column1=value1,column2=value2,...
WHERE column=value;
PythonBeginnerClass @loitd
#pythonvietnam.info
SQL: Insert
• Thêm dữ liệu vào trong bảng
• INSERT INTO table
VALUES (value1,value2,value3,...);
• INSERT
INTO table (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
PythonBeginnerClass @loitd
#pythonvietnam.info
SQL: Delete
• Xóa dữ liệu trong database
• DELETE FROM table
WHERE column=value;
PythonBeginnerClass @loitd
#pythonvietnam.info
Python & MySQL
• Cài đặt thư viện MySQLdb để làm việc với
MySQL
• Windows:
– http://sourceforge.net/projects/mysql-python/
• Linux:
– sudo apt-get install python-mysqldb
PythonBeginnerClass @loitd
#pythonvietnam.info
MySQLdb: connect()
• Mở kết nối tới DB:
– connect(host="localhost",user="root",passwd="",
db="cdcol")
• Lấy con trỏ:
– cur = con.cursor()
PythonBeginnerClass @loitd
#pythonvietnam.info
MySQLdb: Close()
• Đóng kết nối:
– cur.close()
– con.close()
• Commit và rollback dữ liệu:
– con.commit()
– con.rollback()
PythonBeginnerClass @loitd
#pythonvietnam.info
MySQLdb: Bài tập
• Hãy sử dụng configloader để load thông số DB
và thực hiện kết nối tới DB MySQL
PythonBeginnerClass @loitd
#pythonvietnam.info
MySQLdb: Select
• Thực thi câu select:
– cur.execute(sql)
• Fetch dữ liệu
– row1 = cur.fetchone()
– rows = cur.fetchall()
PythonBeginnerClass @loitd
#pythonvietnam.info
MySQLdb: Insert
• Thực thi câu lệnh Insert
• try:
• cur.execute(sql3, data2insert)
• con.commit()
• except Exception, e:
• con.rollback()
• print e
PythonBeginnerClass @loitd
#pythonvietnam.info
MySQLdb: Update
• try:
• cur.execute(sql4)
• con.commit()
• except Exception, e:
• con.rollback()
• print e
PythonBeginnerClass @loitd
#pythonvietnam.info
MySQLdb: Bài tập
• Lấy dữ liệu từ file config, kết nối vào DB, in
toàn bộ dữ liệu của DB, cho người dùng chọn
lựa sửa, xóa 1 row bất kỳ
• (Quản lý học sinh)
PythonBeginnerClass @loitd
#pythonvietnam.info
Redis
• Cài đặt redis trên windows
– Redis.io
– https://github.com/rgl/redis/downloads
– Apt-get install redis-server
• Pip install redis
• Import redis
• Hiểu 4 loại lưu trữ hay gặp trên redis
– Strings
– Lists
– Sets
– hashs
PythonBeginnerClass @loitd
#pythonvietnam.info
Redis
• Redis is an open source, BSD licensed,
advanced key-value cache and store. It is
often referred to as a data structure
server since keys can
contain strings, hashes, lists, sets,sorted
sets, bitmaps and hyperloglogs.
• Nguồn redis.io
PythonBeginnerClass @loitd
#pythonvietnam.info
Redis: key
• Có thể sử dụng bất kỳ binary sequence nào
làm key
• Kích thước lớn nhất cho phép là 512MB
• Không nên đặt quá dài (1 key dài 1MB, …)
– Tốn bộ nhớ
– Tra cứu khó khăn
– Truyền tải giá trị qua môi trường mạng -> tốn
băng thông
– Không cần thiết
PythonBeginnerClass @loitd
#pythonvietnam.info
Redis: Key TTL
• Cú pháp:
– Expire key time
– Hoặc set key ‘abc’ ex time
• Đơn vị tính seconds
• Lệnh ttl key để xem thời gian còn sống của 1
key
PythonBeginnerClass @loitd
#pythonvietnam.info
Redis: Key
• Xóa một key bằng lệnh del key
• Xem kiểu dữ liệu của một key bằng lệnh: type
key
PythonBeginnerClass @loitd
#pythonvietnam.info
Redis: String types
• Là kiểu dữ liệu cơ bản nhất
• Giống với dữ liệu của Memcached
• Giá trị không lớn hơn 512MB
• Giá trị có thể là chuỗi, chuỗi binary, …
• Câu lệnh làm việc cơ bản: SET, GET, INCR,
DECR, MSET, MGET, …
PythonBeginnerClass @loitd
#pythonvietnam.info
Redis: List
• List trong redis là 1 dãy các phần tử sắp xếp
nối nhau: 1,2,3,4,5,…
• Linked list # Array: thời gian thêm mới phần tử
không phụ thuộc vào số lượng phần tử
• Ưu điểm: tốc độ thêm mới phần tử
• Hạn chế của list: tốc độ truy cập phần tử
(ngược lại với sorted sets)
PythonBeginnerClass @loitd
#pythonvietnam.info
Redis: list
PythonBeginnerClass @loitd
#pythonvietnam.info
Redis: List
• Ứng dụng
– Lấy danh sách các công việc/ updates/ feeds mới
nhất của 1 user
– Giao tiếp giữa 2 processes theo mô hình
consumer-producer
PythonBeginnerClass @loitd
#pythonvietnam.info
Redis: connect
• r = redis.StrictRedis(host='localhost',
port=6379, db=0)
• Mỗi một instance của redis sẽ tự tạo một
connection pool để quản lý kết nối tới redis
PythonBeginnerClass @loitd
#pythonvietnam.info
Redis: Connect
• ConnectionPool:
• pool = redis.ConnectionPool(host='localhost',
port=6379, db=0)
• s= redis.Redis(connection_pool=pool)
• -> sử dụng pool chung
PythonBeginnerClass @loitd
#pythonvietnam.info
Redis: Key-value
• #single key
• r.set('f', 'you')
• print r.get('f')
• Sử dụng lệnh get/set tương ứng với redis
client
PythonBeginnerClass @loitd
#pythonvietnam.info
Redis: list
• #list
• r.lpush('lst1', 'San Loeo')
• r.lpush('lst1', 'San Loeo')
• print r.lrange('lst1', 0, -1)
• r.rpop('lst1')
• print r.lrange('lst1', 0, -1)
• Sử dụng các lệnh lpush, rpop để làm việc với
list
PythonBeginnerClass @loitd
#pythonvietnam.info
Redis: Bài tập
• Dựng module kết nối với redis và thực hiện
các thao tác với list và key-value dưới dạng
OOP
PythonBeginnerClass @loitd
#pythonvietnam.info
Redis: Pub/Sub
• Mô hình Publish/Subscribe
• Đối tượng PubSub trong redis-py
• Khai báo một pubsub mới
– Ps = s.pubsub()
– Ps.subscribe(‘pyvn-chnl’, ‘chnl-2’)
– Ps.get_message()
PythonBeginnerClass @loitd
#pythonvietnam.info
Redis: pub/sub
• Publish một message
– S.publish(‘chnl’, ‘I am Loi’)
• Unsubcribe kênh:
– Ps.unsubscribe(‘chnl’)
– Ps.unsubscribe()
PythonBeginnerClass @loitd
#pythonvietnam.info
Redis: Pub/Sub
• Ps.close()
• Sau khi làm việc xong với một đối tượng
pubsub
PythonBeginnerClass @loitd
#pythonvietnam.info
Redis: Pub/Sub
• Xây dựng lại bài tập redis với pub/sub kết nối
vào redis sử dụng connection pool
PythonBeginnerClass @loitd
#pythonvietnam.info
Tổng kết bài học
• SQL
• MySQL
• Redis
PythonBeginnerClass @loitd
#pythonvietnam.info

Python Beginner Class day-11-12-13-database

  • 1.
    Database Th.S Trần ĐứcLợi Pythonvietnam.info
  • 2.
    Ôn tập bàicũ • Ôn lại nội dung đã học về Class • Chữa bài ConfigLoaderClass PythonBeginnerClass @loitd #pythonvietnam.info
  • 3.
    Mục đích bàihọc • Tìm hiểu về làm việc với Database trong python – Database introduction – SQL – MySQL – Redis PythonBeginnerClass @loitd #pythonvietnam.info
  • 4.
    Database • Cơ sởdữ liệu là một tập hợp có tổ chức của dữ liệu • Để quản lý cơ sở dữ liệu ta cần DBMS (Database Management System) • Các cơ sở dữ liệu phổ biến: Oracle, MySQL, SQLite, SQLServer, Postgres, … PythonBeginnerClass @loitd #pythonvietnam.info
  • 5.
    Database • 4 loạiCSDL chính: – Hierarchical – Network – Relational – Object Relational PythonBeginnerClass @loitd #pythonvietnam.info
  • 6.
    Database • Lưu trữthông tin về tất cả các thành viên trong công ty, trường học, bệnh viện, … • Relational DB: – Employee table – Department table – Salary table PythonBeginnerClass @loitd #pythonvietnam.info
  • 7.
    Database • Database: chứanhiều bảng • Table: còn được gọi là Relation, bao gồm tuples và attributes • Tuple (row): Một tập hợp các trường đại diện cho một phần tử • Attribute (column, field): Một trường đại diện cho một thuộc tính của các phần tử PythonBeginnerClass @loitd #pythonvietnam.info
  • 8.
    Database EMPLOYEE_ID FIRST_NAME LAST_NAMEDEPT_ID EMAIL 1001 Loi Tran 99 loitd@pythonvi etnam.info 1002 John Hei 98 john@pythonvi etnam.info PythonBeginnerClass @loitd #pythonvietnam.info Department_ID Dept_name Manager_ID 99 Kế Toán 1001 98 HT 1005
  • 9.
    Database: Key • PrimaryKey – Định nghĩa một bản ghi duy nhất – Phải là giá trị duy nhất – Không thể chứa giá trị NULL – Mỗi bảng đều nên có chỉ 1 primary key • Foreign Key – Trỏ tới một primary key của một bảng khác PythonBeginnerClass @loitd #pythonvietnam.info
  • 10.
    Database: SQL • Đểquery dữ liệu từ DB • Structured query language • Là ngôn ngữ tuân theo chuẩn ANSI thao tác trên CSDL quan hệ (relational database) PythonBeginnerClass @loitd #pythonvietnam.info
  • 11.
    SQL • Query dữliệu • Thêm mới, sửa, xóa các dòng dữ liệu trong bảng • Tạo mới, thay thế, chỉnh sửa và drop các đối tượng • Quản lý truy nhập PythonBeginnerClass @loitd #pythonvietnam.info
  • 12.
    SQL • Data ManipulationLanguage – Select – Insert – Update – Delete – Merge • Data Definition Language – Create – Alter – Drop – Rename – Truncate – comment PythonBeginnerClass @loitd #pythonvietnam.info
  • 13.
    SQL • Data ControlLanguage – Grant – Revoke • Transaction Control – Commit – Rollback – Savepoint PythonBeginnerClass @loitd #pythonvietnam.info
  • 14.
    MySQL • Open-source database •Community Edition • Standard Edition • Enterprise Edition • MySQL Cluster Carrier Grade Edition PythonBeginnerClass @loitd #pythonvietnam.info
  • 15.
    MySQL • Cài đặt: –http://www.wampserver.com/en/ – https://www.apachefriends.org/index.html – https://www.mamp.info/en/ PythonBeginnerClass @loitd #pythonvietnam.info
  • 16.
    SQL: Select • Lấydữ liệu từ DB • Column alias • Distinct keyword • Select * | distinct | column | expression alias from Table PythonBeginnerClass @loitd #pythonvietnam.info
  • 17.
    SQL: where • Giớihạn số lượng dữ liệu bằng điều kiện • SELECT column,column FROM table WHERE column = value; PythonBeginnerClass @loitd #pythonvietnam.info
  • 18.
    SQL: Update • Cậpnhật dữ liệu cho DB • UPDATE table SET column1=value1,column2=value2,... WHERE column=value; PythonBeginnerClass @loitd #pythonvietnam.info
  • 19.
    SQL: Insert • Thêmdữ liệu vào trong bảng • INSERT INTO table VALUES (value1,value2,value3,...); • INSERT INTO table (column1,column2,column3,...) VALUES (value1,value2,value3,...); PythonBeginnerClass @loitd #pythonvietnam.info
  • 20.
    SQL: Delete • Xóadữ liệu trong database • DELETE FROM table WHERE column=value; PythonBeginnerClass @loitd #pythonvietnam.info
  • 21.
    Python & MySQL •Cài đặt thư viện MySQLdb để làm việc với MySQL • Windows: – http://sourceforge.net/projects/mysql-python/ • Linux: – sudo apt-get install python-mysqldb PythonBeginnerClass @loitd #pythonvietnam.info
  • 22.
    MySQLdb: connect() • Mởkết nối tới DB: – connect(host="localhost",user="root",passwd="", db="cdcol") • Lấy con trỏ: – cur = con.cursor() PythonBeginnerClass @loitd #pythonvietnam.info
  • 23.
    MySQLdb: Close() • Đóngkết nối: – cur.close() – con.close() • Commit và rollback dữ liệu: – con.commit() – con.rollback() PythonBeginnerClass @loitd #pythonvietnam.info
  • 24.
    MySQLdb: Bài tập •Hãy sử dụng configloader để load thông số DB và thực hiện kết nối tới DB MySQL PythonBeginnerClass @loitd #pythonvietnam.info
  • 25.
    MySQLdb: Select • Thựcthi câu select: – cur.execute(sql) • Fetch dữ liệu – row1 = cur.fetchone() – rows = cur.fetchall() PythonBeginnerClass @loitd #pythonvietnam.info
  • 26.
    MySQLdb: Insert • Thựcthi câu lệnh Insert • try: • cur.execute(sql3, data2insert) • con.commit() • except Exception, e: • con.rollback() • print e PythonBeginnerClass @loitd #pythonvietnam.info
  • 27.
    MySQLdb: Update • try: •cur.execute(sql4) • con.commit() • except Exception, e: • con.rollback() • print e PythonBeginnerClass @loitd #pythonvietnam.info
  • 28.
    MySQLdb: Bài tập •Lấy dữ liệu từ file config, kết nối vào DB, in toàn bộ dữ liệu của DB, cho người dùng chọn lựa sửa, xóa 1 row bất kỳ • (Quản lý học sinh) PythonBeginnerClass @loitd #pythonvietnam.info
  • 29.
    Redis • Cài đặtredis trên windows – Redis.io – https://github.com/rgl/redis/downloads – Apt-get install redis-server • Pip install redis • Import redis • Hiểu 4 loại lưu trữ hay gặp trên redis – Strings – Lists – Sets – hashs PythonBeginnerClass @loitd #pythonvietnam.info
  • 30.
    Redis • Redis isan open source, BSD licensed, advanced key-value cache and store. It is often referred to as a data structure server since keys can contain strings, hashes, lists, sets,sorted sets, bitmaps and hyperloglogs. • Nguồn redis.io PythonBeginnerClass @loitd #pythonvietnam.info
  • 31.
    Redis: key • Cóthể sử dụng bất kỳ binary sequence nào làm key • Kích thước lớn nhất cho phép là 512MB • Không nên đặt quá dài (1 key dài 1MB, …) – Tốn bộ nhớ – Tra cứu khó khăn – Truyền tải giá trị qua môi trường mạng -> tốn băng thông – Không cần thiết PythonBeginnerClass @loitd #pythonvietnam.info
  • 32.
    Redis: Key TTL •Cú pháp: – Expire key time – Hoặc set key ‘abc’ ex time • Đơn vị tính seconds • Lệnh ttl key để xem thời gian còn sống của 1 key PythonBeginnerClass @loitd #pythonvietnam.info
  • 33.
    Redis: Key • Xóamột key bằng lệnh del key • Xem kiểu dữ liệu của một key bằng lệnh: type key PythonBeginnerClass @loitd #pythonvietnam.info
  • 34.
    Redis: String types •Là kiểu dữ liệu cơ bản nhất • Giống với dữ liệu của Memcached • Giá trị không lớn hơn 512MB • Giá trị có thể là chuỗi, chuỗi binary, … • Câu lệnh làm việc cơ bản: SET, GET, INCR, DECR, MSET, MGET, … PythonBeginnerClass @loitd #pythonvietnam.info
  • 35.
    Redis: List • Listtrong redis là 1 dãy các phần tử sắp xếp nối nhau: 1,2,3,4,5,… • Linked list # Array: thời gian thêm mới phần tử không phụ thuộc vào số lượng phần tử • Ưu điểm: tốc độ thêm mới phần tử • Hạn chế của list: tốc độ truy cập phần tử (ngược lại với sorted sets) PythonBeginnerClass @loitd #pythonvietnam.info
  • 36.
  • 37.
    Redis: List • Ứngdụng – Lấy danh sách các công việc/ updates/ feeds mới nhất của 1 user – Giao tiếp giữa 2 processes theo mô hình consumer-producer PythonBeginnerClass @loitd #pythonvietnam.info
  • 38.
    Redis: connect • r= redis.StrictRedis(host='localhost', port=6379, db=0) • Mỗi một instance của redis sẽ tự tạo một connection pool để quản lý kết nối tới redis PythonBeginnerClass @loitd #pythonvietnam.info
  • 39.
    Redis: Connect • ConnectionPool: •pool = redis.ConnectionPool(host='localhost', port=6379, db=0) • s= redis.Redis(connection_pool=pool) • -> sử dụng pool chung PythonBeginnerClass @loitd #pythonvietnam.info
  • 40.
    Redis: Key-value • #singlekey • r.set('f', 'you') • print r.get('f') • Sử dụng lệnh get/set tương ứng với redis client PythonBeginnerClass @loitd #pythonvietnam.info
  • 41.
    Redis: list • #list •r.lpush('lst1', 'San Loeo') • r.lpush('lst1', 'San Loeo') • print r.lrange('lst1', 0, -1) • r.rpop('lst1') • print r.lrange('lst1', 0, -1) • Sử dụng các lệnh lpush, rpop để làm việc với list PythonBeginnerClass @loitd #pythonvietnam.info
  • 42.
    Redis: Bài tập •Dựng module kết nối với redis và thực hiện các thao tác với list và key-value dưới dạng OOP PythonBeginnerClass @loitd #pythonvietnam.info
  • 43.
    Redis: Pub/Sub • Môhình Publish/Subscribe • Đối tượng PubSub trong redis-py • Khai báo một pubsub mới – Ps = s.pubsub() – Ps.subscribe(‘pyvn-chnl’, ‘chnl-2’) – Ps.get_message() PythonBeginnerClass @loitd #pythonvietnam.info
  • 44.
    Redis: pub/sub • Publishmột message – S.publish(‘chnl’, ‘I am Loi’) • Unsubcribe kênh: – Ps.unsubscribe(‘chnl’) – Ps.unsubscribe() PythonBeginnerClass @loitd #pythonvietnam.info
  • 45.
    Redis: Pub/Sub • Ps.close() •Sau khi làm việc xong với một đối tượng pubsub PythonBeginnerClass @loitd #pythonvietnam.info
  • 46.
    Redis: Pub/Sub • Xâydựng lại bài tập redis với pub/sub kết nối vào redis sử dụng connection pool PythonBeginnerClass @loitd #pythonvietnam.info
  • 47.
    Tổng kết bàihọc • SQL • MySQL • Redis PythonBeginnerClass @loitd #pythonvietnam.info