Hướng dẫn fetch python - lấy con trăn

MySQL là một hệ cơ sở dữ liệu quan hệ phổ biến nhất hiện nay. Rất nhiều ngôn ngữ có thể kết nối đến MySQL và Python cũng không ngoại lệ.

Mặc định Python không có thư viện để kết nối đến MySQL server. Trong phần này, để kết nối đến MySQL Server từ Python, chúng ta sẽ sử dụng module

import MySQLdb
1

9.1. Cài đặt MySQLdb

Cài đặt thông qua

import MySQLdb
2 như sau:

Hướng dẫn fetch python - lấy con trăn

$ sudo pip install MySQL-python

Tham khảo thêm tại: https://pypi.python.org/pypi/MySQLhttps://pypi.python.org/pypi/MySQL

Khai báo module MySQLdb là có thể sử dụng.

import MySQLdb

Trong một số trường hợp đã cài MySQLdb nhưng import báo lỗi thiếu file

import MySQLdb
3 . Nguyên nhân có thể là do hiện tại đường dẫn đến file không tồn tại. Thử tạo symlink hoặc sử dụng câu lệnh sau để tạo symlink từ file 
import MySQLdb
3 đến thư mục
import MySQLdb
5

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

9.2. Kết nối đến MySQL Server

Bạn cần có một MySQL server đang chạy và cho kết nối đến. Trong trường hợp này là localhost nên không cần cấu hình đặc biệt, chỉ cần cung cấp username và password là có thể kết nối đến MySQL Server.

Thực hiện gọi hàm như sau để trả về kết nối:

import MySQLdb

dbcon = MySQLdb.connect(host = 'localhost', user = 'myusername', passwd = 'mypassword', db = 'mydbname ')

Nếu kết nối không thành công thì sẽ báo lỗi và ngưng chương trình. Cách kết nối an toàn là đưa vào trong try để bắt lỗi như sau:try để bắt lỗi như sau:

import MySQLdb

db = None

try:

db = MySQLdb.connect(host = 'localhost', user = 'root', passwd = 'root', db = 'mysql')

except MySQLdb.Error, e:
      print "Error %d: %s" % (e.args[0],e.args[1])
      sys.exit(1)

if db:
      cur = db.cursor()
      cur.execute("SELECT VERSION()")
      ver = cur.fetchone()
      print "Database version : %s " % ver

9.3. Kết nối với charset utf8

Mặc định kết nối đến MySQL server là charset

import MySQLdb
6 nên khi lấy dữ liệu unicode thì hiển thị Tiếng Việt không đúng, bạn cần phải chọn charset là
import MySQLdb
7 khi tạo kết nối. Cú pháp như sau:

...
db = MySQLdb.connect(host = 'localhost', user = 'ro ot', passwd = 'root', db = 'test', charset = 'utf8')

Tuyển dụng python các vị trí

9.4. Query dữ liệu

Để truy vấn dữ liệu (chạy câu lệnh SQL) thì sử dụng cursor của MySQLdb. Ví dụ:cursor của MySQLdb. Ví dụ:

import MySQLdb

db = MySQLdb.connect(host = 'localhost', user = 'ro ot', passwd = 'root', db = 'mysql');
cursor = db.cursor()
sql = 'SELECT * FROM user'
cursor.execute(sql)
myusers = cursor.fetchall()

Ví dụ dữ liệu biến

import MySQLdb
8 là:
import MySQLdb
9
import MySQLdb
8 là:
import MySQLdb
9

Mặc định,

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
0 sẽ trả về mỗi dòng dữ liệu từ MySQL theo kiểu
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
1 , tức là không có key. Nếu bạn muốn trả về kiểu
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
2 thì có thể khai báo:

import MySQLdb

db = MySQLdb.connect(host = 'localhost', user = 'ro ot', passwd = 'root', db = 'mysql')
cursor = db.cursor(MySQLdb.cursors.DictCursor) ...

9.5. Fetch dữ liệu

Có một số cách để fetch dữ liệu thông dụng từ

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
0 sau khi đã
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
4 là
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
5 và
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
6 .khi đã
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
4
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
5
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
6 .

  • sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
    7: chỉ fetch một dòng dữ liệu. Nếu muốn fetch nhiều dòng dữ liệu thì có thể gọi nhiều lần, mỗi lần sẽ trả về một dòng dữ liệu. Tốt cho trường hợp truy vấn rất nhiều dữ liệu một lúc. Nếu trả về
    sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
    8 tức là đã fetch hết dữ liệu từ câu truy vấn.
    : chỉ fetch một dòng dữ liệu. Nếu muốn fetch nhiều dòng dữ liệu thì có thể gọi nhiều lần, mỗi lần sẽ trả về một dòng dữ liệu. Tốt cho trường hợp truy vấn rất nhiều dữ liệu một lúc. Nếu trả về
    sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
    8 tức là đã fetch hết dữ liệu từ câu truy vấn.
  • sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
    9: fetch toàn bộ dữ liệu truy vấn được từ câu truy vấn và trả về một tuple chứa các dòng dữ liệu. Mỗi phần tử của Tuple có thể là một Tuple khác hoặc là một Dictionary tùy theo cài đặt ở bước lấy cursor (Xem phần 9.4).
  • import MySQLdb
    
    dbcon = MySQLdb.connect(host = 'localhost', user = 'myusername', passwd = 'mypassword', db = 'mydbname ')
    
    0: nằm ở giữa 2 kiểu fetch trên, có thể quy định số lượng row trong mỗi lần fetch. Nếu fetch hết thì trả về Tuple rỗng.

Sau khi kết nối và truy vấn thì có thể đóng kết nối theo ví dụ sau:

import MySQLdb
db = MySQLdb.connect(...)
db.close()

Ngoài ra, bạn cũng nên đóng cursor khi không còn sử dụng theo ví dụ:cursor khi không còn sử dụng theo ví dụ:

import MySQLdb
db = MySQLdb.connect(...)
cursor = db.cursor()
cursor.close()
db.close()

9.7. Prepared Statement

Prepared statement là kỹ thuật tham số hóa các dữ liệu truyền vào câu truy vấn thay vì nối chuỗi trực tiếp để xây dựng một chuỗi truy vấn dài. Kỹ thuật này được áp dụng nhiều và giúp tăng hiệu quả và tính bảo mật của câu truy vấn. Ví dụ:

import MySQLdb
0

Mỗi tham số truy vấn sẽ được thay thế bằng

import MySQLdb

dbcon = MySQLdb.connect(host = 'localhost', user = 'myusername', passwd = 'mypassword', db = 'mydbname ')
1 và phương thức
import MySQLdb

dbcon = MySQLdb.connect(host = 'localhost', user = 'myusername', passwd = 'mypassword', db = 'mydbname ')
2 sẽ có tham số thứ 2 là một Tuple có giá trị tương ứng với thứ tự xuất hiện của các thành phần
import MySQLdb

dbcon = MySQLdb.connect(host = 'localhost', user = 'myusername', passwd = 'mypassword', db = 'mydbname ')
1