Python運算元據庫(3)

hiekay發表於2019-01-09

通過python運算元據庫的行為,任何對資料庫進行的操作,都能夠通過python-mysqldb來實現。

建立資料庫

之前通過mysql>寫SQL語句,建立了一個名字叫做mytest的資料庫,然後用下面的方式跟這個資料庫連線

>>> import MySQLdb
>>> conn = MySQLdb.connect(host="localhost",user="root",passwd="123123",db="mytest",charset="utf8")

在上面的連線中,引數db="mytest"其實可以省略,如果省略,就是沒有跟任何具體的資料庫連線,只是連線了mysql。

>>> import MySQLdb
>>> conn = MySQLdb.connect("localhost","root","123123",port=3306,charset="utf8")

這種連線沒有指定具體資料庫,接下來就可以用類似mysql>互動模式下的方式進行操作。

>>> conn.select_db("mytest")
>>> cur = conn.cursor()
>>> cur.execute("select * from users")
11L
>>> cur.fetchall()
((1L, u`hiekay`, u`123123`, u`hiekay@gmail.com`), (2L, u`python`, u`123456`, u`python@gmail.com`), (3L, u`google`, u`111222`, u`g@gmail.com`), (4L, u`facebook`, u`222333`, u`f@face.book`), (5L, u`github`, u`333444`, u`git@hub.com`), (6L, u`docker`, u`444555`, u`doc@ker.com`), (7L, u`u5854`, u`9988`, u`hiekay@gmail.com`), (8L, u`u5854`, u`9988`, u`hiekay@gmail.com`), (9L, u`u5854`, u`9988`, u`hiekay@gmail.com`), (10L, u`u5854`, u`9988`, u`hiekay@gmail.com`), (11L, u`u5f20u4e09`, u`1122`, u`hiekay@gmail.com`))

conn.select_db()選擇要操作的資料庫,然後通過指標就可以操作這個資料庫了。其它的操作跟之前的一樣。

如果不選資料庫,而是要新建一個資料庫,如何操作?

>>> cur = conn.cursor()
>>> cur.execute("create database newtest")
1L

建立資料庫之後,就可以選擇這個資料庫,然後在這個資料庫中建立一個資料表。

>>> cur.execute("create table newusers (id int(2) primary key auto_increment, username varchar(20), age int(2), email text)")
0L

括號裡面是引號,引號裡面就是建立資料表的語句,一定是熟悉的。這樣就在newtest這個資料庫中建立了一個名為newusers的表

>>> cur.execute("show tables")
1L
>>> cur.fetchall()
((u`newusers`,),)

這是檢視錶的方式。當然,可以在mysql>互動模式下檢視是不是存在這個表。如下:

mysql> use newtest;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-------------------+
| Tables_in_newtest |
+-------------------+
| newusers          |
+-------------------+
1 row in set (0.00 sec)

mysql> desc newusers;
+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| id       | int(2)      | NO   | PRI | NULL    | auto_increment |
| username | varchar(20) | YES  |     | NULL    |                |
| age      | int(2)      | YES  |     | NULL    |                |
| email    | text        | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

以上就通過python-mysqldb實現了對資料庫和表的建立。

當然,能建就能刪除。可以自行嘗試,在這裡就不贅述,原理就是在cur.execute()中寫SQL語句。

關閉一切

當進行完有關資料操作之後,最後要做的就是關閉遊標(指標)和連線。用如下命令實現:

>>> cur.close()
>>> conn.close()

注意關閉順序,和開啟的順序相反。

關於亂碼問題

這個問題是編寫web時常常困擾程式設計師的問題,亂碼的本質來自於編碼格式的設定混亂。所以,要特別提醒諸位注意。在用python-mysqldb的時候,為了放置亂碼,可以做如下統一設定:

  1. Python檔案設定編碼 utf-8(檔案前面加上 #encoding=utf-8)
  2. MySQL資料庫charset=utf8(資料庫的設定方法,可以網上搜尋)
  3. Python連線MySQL是加上引數 charset=utf8
  4. 設定Python的預設編碼為 utf-8 (sys.setdefaultencoding(utf-8),這個後面會講述)

程式碼示例:

#encoding=utf-8

import sys
import MySQLdb

reload(sys)
sys.setdefaultencoding(`utf-8`)

db=MySQLdb.connect(user=`root`,charset=`utf8`) 

MySQL的配置檔案設定也必須配置成utf8 設定 MySQL 的 my.cnf 檔案,在 [client]/[mysqld]部分都設定預設的字符集(通常在/etc/mysql/my.cnf):

[client] default-character-set = utf8
[mysqld] default-character-set = utf8


相關文章