您好,登錄后才能下訂單哦!
可以直接從MySQL官方網站下載最新版本。MySQL是跨平臺的,選擇對應的平臺下載安裝文件,安裝即可。 如果是Windows用戶,那么安裝過程非常簡單,直接根據向導一步一步操作即可。 如果是 Linux 用戶,安裝過程也是相當簡單的。
## Ubuntu / Debian $ sudo apt-get install mysql-server $ sudo apt-get install mysql-client ## CentOS / RHEL # yum install -y mysql mysql-server mysql-devel
基礎設置:
## 啟動 mysql # service mysqld start ## 初始化 # /usr/bin/mysql_secure_installation ## 編輯 my.cnf ,修改默認編碼設置 # vi /etc/my.cnf [client] default-character-set = utf8 [mysqld] default-storage-engine = INNODB character-set-server = utf8 collation-server = utf8_general_ci ## 驗證 # service mysqld restart # mysql -u root -p mysql> show variables like '%char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)
由于MySQL服務器以獨立的進程運行,并通過網絡對外服務,所以,需要支持Python的MySQL驅動來連接到MySQL服務器。
目前,有兩個MySQL驅動:
mysql-connector-python:是MySQL官方的純Python驅動;
MySQL-python:是封裝了MySQL C驅動的Python驅動。
MySQL-python
MySQL-3.23 through 5.5 and Python-2.4 through 2.7 are currently supported. Python-3.0 will be supported in a future release.
方式一:(推薦)
# pip install MySQL-python
方式二:(推薦)
## Ubuntu $ sudo apt-get install python-mysqldb ## CentOS # yum install -y MySQL-python
方式三:
下載地址: https://pypi.python.org/pypi/MySQL-python/
下載完成MySQL-python-1.2.5.zip 文件之后直接解壓。進入MySQL-python-1.2.5目錄:
# unzip MySQL-python-1.2.5.zip # cd MySQL-python-1.2.5 # python setup.py install
測試是否安裝成功
測試非常簡單,檢查 MySQLdb 模塊是否可以正常導入即可。
[root@localhost ~]# python Python 2.6.6 (r266:84292, Jul 23 2015, 15:22:56) [GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import MySQLdb
沒有報錯提示MySQLdb模塊找不到,說明安裝OK 。
mysql> show databases; // 查看當前所有的數據庫 +--------------------+ | Database | +--------------------+ | information_schema | | mysql | +--------------------+ 2 rows in set (0.15 sec) mysql> CREATE DATABASE test; // 創建數據庫 Query OK, 1 row affected (0.17 sec) mysql> use test; Database changed mysql> show tables; // 查看數據庫表 Empty set (0.00 sec) // 創建名為 user 的表 mysql> CREATE TABLE user ( id INT UNSIGNED AUTO_INCREMENT, name VARCHAR(20), password VARCHAR(20), PRIMARY KEY(id) ) engine=innodb default charset=utf8; Query OK, 0 rows affected (0.16 sec) // 向表中插入幾條數據 mysql> INSERT INTO user(name, password) VALUES('Tom', '1321'),('Alen', '7875'),('Jack', '6759'); Query OK, 3 rows affected (0.07 sec) Records: 3 Duplicates: 0 Warnings: 0 // 查看 user 表數據 mysql> SELECT * FROM user; +----+------+----------+ | id | name | password | +----+------+----------+ | 1 | Tom | 1321 | | 2 | Alen | 7875 | | 3 | Jack | 6759 | +----+------+----------+ 3 rows in set (0.13 sec)
先來個簡單的示例程序:
# -*- coding: utf-8 -*- import MySQLdb try: conn = MySQLdb.connect( host = 'localhost', user = 'root', passwd = '123456', db = 'test', port = 3306 ) cur = conn.cursor() # 執行SQL cur.execute (""" CREATE TABLE python ( ID INT, COL1 VARCHAR(40), COL2 VARCHAR(40), COL3 VARCHAR(40) ) """) cur.execute (""" INSERT INTO TEST (ID, COL1, COL2, COL3) VALUES (1, 'a', 'b', 'c'), (2, 'aa', 'bb', 'cc'), (3, 'aaa', 'bbb', 'ccc') """) cur.execute('select * from python') cur.close() conn.commit() conn.close() except MySQLdb.Error,e: print "Mysql Error %d: %s" % (e.args[0], e.args[1])
請注意修改你的數據庫,主機名,用戶名,密碼。 連接數據庫時要注意數據庫編碼,不然一堆編碼問題很愁人的~最好統一使用utf8編碼。為了避免亂碼,可修改一個參數:
conn = MySQLdb.Connect(host='localhost', user='root', passwd='123456', db='test') 中加一個屬性:
改為:
conn = MySQLdb.Connect(host='localhost', user='root', passwd='123456', db='test', charset='utf8')
charset是要跟你數據庫的編碼一樣,如果是數據庫是gb2312 ,則寫charset='gb2312'。
1、增
# -*- coding: utf-8 -*- import MySQLdb conn = MySQLdb.connect( host = 'localhost', port = 3306, user = 'root', passwd = '123456', db = 'test', charset = 'utf8' ) cur = conn.cursor() cur.execute("INSERT INTO user(name, password) VALUES('python', '8901')") cur.close() conn.commit() conn.close()
通過上面execute()方法中寫入純的sql語句來插入數據并不方便。如:
>>> cur.execute("insert into user(name, password) values('python', '8901')")
我要想插入新的數據,必須要對這條語句中的值做修改。我們可以做如下修改:
# -*- coding: utf-8 -*- import MySQLdb conn = MySQLdb.connect( host = 'localhost', port = 3306, user = 'root', passwd = '123456', db = 'test', charset = 'utf8' ) cur = conn.cursor() sqli = "INSERT INTO user(name, password) VALUES(%s, %s)" cur.execute(sqli, ('chrome', '1903')) cur.close() conn.commit() conn.close()
executemany()方法可以一次插入多條記錄
sqli = "INSERT INTO user(name, password) VALUES(%s, %s)" cur.executemany(sqli, [ ('IE', '1021'), ('Firefox', '9012'), ('windows', '6213') ] )
最佳實踐:
如果是插入數據,要執行commit操作,不然數據不會被寫入數據庫。最好是執行完所有的sql語句之后再commit,實踐證明,這樣會帶來很大的速度提升。
cur.execute(sqli, (value1, value2)) , 如果value的值存在不確定性,那么上面兩條語句存在sql注入風險。
例如,如果value是一段html代碼,html代碼中如果存在引號(單引號或者雙引號),如果不加處理,那么sql語句就將被截斷,將會引發插入錯誤。
如果value中存在英文逗號,將會造成前面的key和后面的value不對應,也不能正確插入數據。
如果value中存在反斜線 \,那么在python中反斜線后面的數據將被轉義,如果不處理插入的話將會造成字符丟失或者其他不可遇見的結果。
因為在 SQL 中和在 Python 中有好多含有特殊含義的符號,如果不能很好的處理的話將會出現好多問題,幸好MYSQLdb模塊給我們提供了一個escape_string方法,用這個方法能自動處理好上面的問題,特別方便。
value = MySQLdb.escape_string(value) # 該函數阻止 python字符串以及SQL轉義
2、查
也許你已經嘗試了在python中通過
>>>cur.execute("select * from user")
來查詢數據表中的數據,但它并沒有把表中的數據打印出來。
來看看這條語句獲得的是什么
>>>aa=cur.execute("select * from user")
>>>print aa
5
它獲得的只是我們的表中有多少條數據。那怎樣才能獲得表中的數據呢?
# -*- coding: utf-8 -*- import MySQLdb conn = MySQLdb.connect( host = 'localhost', port = 3306, user = 'root', passwd = '123456', db = 'test', charset = 'utf8' ) cur = conn.cursor() # 獲取表中共有多少條記錄 sqls = "SELECT * FROM user" num = cur.execute(sqls) print num # 打印 info = cur.fetchmany(num) for line in info: print line cur.close() conn.commit() conn.close()
查詢通常有兩種方式:
一種是使用cursor.fetchall()獲取所有查詢結果,然后再一行一行的迭代;
另一種每次通過cursor.fetchone()獲取一條記錄,直到獲取的結果為空為止。看一下下面的例子:
import MySQLdb try: conn = MySQLdb.connect(host='localhost',user='root',passwd='123456',port=3306) cur = conn.cursor() conn.select_db('test') sqls = "SELECT id, name, password FROM user" cur.execute(sqls) rows = cur.fetchall() for row in rows: print '%s, %s, %s' % (row[0], row[1], row[2]) print 'Number of rows returned: %s' % (cur.rowcount) ############## sqls = "SELECT id, name, password FROM user" cur.execute(sqls) while True: row = cur.fetchone() if row == None: break print '%s, %s, %s' % (row[0], row[1], row[2]) print 'Number of rows returned: %s' % (cur.rowcount) ############# cur.scroll(0,mode = 'absolute') # 移動游標 results = cur.fetchmany(5) for r in results: print r conn.commit() cur.close() conn.close() except MySQLdb.Error,e: print "Mysql Error %d: %s" % (e.args[0], e.args[1])
下面貼一下常用的函數:
conn連接對象也提供了對事務操作的支持,標準的方法
commit() 提交
rollback() 回滾
cursor用來執行命令的方法:
callproc(self, procname, args):用來執行存儲過程,接收的參數為存儲過程名和參數列表,返回值為受影響的行數
execute(self, query, args):執行單條sql語句,接收的參數為sql語句本身和使用的參數列表,返回值為受影響的行數
executemany(self, query, args):執行單挑sql語句,但是重復執行參數列表里的參數,返回值為受影響的行數
nextset(self):移動到下一個結果集
cursor用來接收返回值的方法:
fetchall(self):接收全部的返回結果行.
fetchmany(self, size=None):接收size條返回結果行.如果size的值大于返回的結果行的數量,則會返回cursor.arraysize條數據.
fetchone(self):返回一條結果行.
scroll(self, value, mode='relative'):移動指針到某一行.如果mode='relative',則表示從當前所在行移動value條,如果 mode='absolute',則表示從結果集的第一行移動value條.
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。