python python操作MySQL
一,安裝MySQL
這裏小編就不詳細介紹了,要是有不會安裝的可以參考下面博客
http://www.cnblogs.com/wj-1314/p/7573242.html
二,安裝MySQL-python
要想使python可以操作mysql 就需要MySQL-python驅動,它是python 操作mysql必不可少的模塊。
下載地址:https://pypi.python.org/pypi/MySQL-python/
下載MySQL-python-1.2.5.zip 文件之後直接解壓。進入MySQL-python-1.2.5目錄:
>>python setup.py install
然後安裝pymysql
pip install pymysql
三,測試pymysql模塊
測試非常簡單,檢查MySQLdb 模塊是否可以正常導入。
沒有報錯提示MySQLdb模塊找不到,說明安裝OK
四,mysql 的基本操作
mysql> show databases; // 查看當前所有的數據庫 +--------------------+ | Database | +--------------------+ | information_schema | | csvt | | csvt04 | | mysql | | performance_schema | | test | +--------------------+ rows in set (0.18 sec) mysql> use test; //作用與test數據庫 Database changed mysql> show tables; //查看test庫下面的表 Empty set (0.00 sec) //創建user表,name 和password 兩個字段 mysql> CREATE TABLE user (name VARCHAR(20),password VARCHAR(20)); Query OK, 0 rows affected (0.27 sec) //向user表內插入若幹條數據 mysql> insert into user values(‘Tom‘,‘1321‘); Query OK, 1 row affected (0.05 sec) mysql> insert into user values(‘Alen‘,‘7875‘); Query OK, 1 row affected (0.08 sec) mysql> insert into user values(‘Jack‘,‘7455‘); Query OK, 1 row affected (0.04 sec) //查看user表的數據 mysql> select * from user; +------+----------+ | name | password | +------+----------+ | Tom | 1321 | | Alen | 7875 | | Jack | 7455 | +------+----------+ rows in set (0.01 sec) //刪除name 等於Jack的數據 mysql> delete from user where name = ‘Jack‘; Query OK, 1 rows affected (0.06 sec) //修改name等於Alen 的password 為 1111 mysql> update user set password=‘1111‘ where name = ‘Alen‘; Query OK, 1 row affected (0.05 sec) Rows matched: 1 Changed: 1 Warnings: 0 //查看表內容 mysql> select * from user; +--------+----------+ | name | password | +--------+----------+ | Tom | 1321 | | Alen | 1111 | +--------+----------+ rows in set (0.00 sec)
五,python 操作mysql數據庫基礎
1,執行SQL,具體語句如下:
#coding=utf-8 import MySQLdb
# 打開數據庫連接
conn= MySQLdb.connect( host=‘localhost‘, port = 3306, user=‘root‘, passwd=‘123456‘, db =‘test‘, )
# 使用cursor()方法獲取操作遊標 cur = conn.cursor() #創建數據表 #cur.execute("create table student(id int ,name varchar(20),class varchar(30),age varchar(10))") #插入一條數據 #cur.execute("insert into student values(‘2‘,‘Tom‘,‘3 year 2 class‘,‘9‘)") #修改查詢條件的數據 #cur.execute("update student set class=‘3 year 1 class‘ where name = ‘Tom‘") #刪除查詢條件的數據 #cur.execute("delete from student where age=‘9‘")
# 關閉遊標 cur.close()
# 提交,不然無法保存新建或者修改的數據 conn.commit()
# 關閉數據庫連接conn.close()
2,獲取新創建數據自增ID
import pymysql conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘123‘, db=‘t1‘) cursor = conn.cursor() cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)]) conn.commit() cursor.close() conn.close() # 獲取最新自增ID new_id = cursor.lastrowid
3、獲取查詢數據
import pymysql conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘123‘, db=‘t1‘) cursor = conn.cursor() cursor.execute("select * from hosts") # 獲取第一行數據 row_1 = cursor.fetchone() # 獲取前n行數據 # row_2 = cursor.fetchmany(3) # 獲取所有數據 # row_3 = cursor.fetchall() conn.commit() cursor.close() conn.close()
fetchone()方法可以幫助我們獲得表中的數據,可是每次執行cur.fetchone() 獲得的數據都不一樣,換句話說我沒執行一次,遊標會從表中的第一條數據移動到下一條數據的位置,所以,我再次執行的時候得到的是第二條數據。
註:在fetch數據時按照順序進行,可以使用cursor.scroll(num,mode)來移動遊標位置,如:
- cursor.scroll(1,mode=‘relative‘) # 相對當前位置移動
- cursor.scroll(2,mode=‘absolute‘) # 相對絕對位置移動
4、fetch數據類型
關於默認獲取的數據是元祖類型,如果想要或者字典類型的數據,即:
import pymysql conn = pymysql.connect(host=‘127.0.0.1‘, port=3306, user=‘root‘, passwd=‘123‘, db=‘t1‘) # 遊標設置為字典類型 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) r = cursor.execute("call p1()") result = cursor.fetchone() conn.commit() cursor.close() conn.close()
5,插入數據
通過上面execute()方法中寫入純的sql語句來插入數據並不方便。如:
>>>cur.execute("insert into student values(‘2‘,‘Tom‘,‘3 year 2 class‘,‘9‘)")
我要想插入新的數據,必須要對這條語句中的值做修改。我們可以做如下修改:
#coding=utf-8 import MySQLdb conn= MySQLdb.connect( host=‘localhost‘, port = 3306, user=‘root‘, passwd=‘123456‘, db =‘test‘, ) cur = conn.cursor() #插入一條數據 sqli="insert into student values(%s,%s,%s,%s)" cur.execute(sqli,(‘3‘,‘Huhu‘,‘2 year 1 class‘,‘7‘)) cur.close() conn.commit() conn.close()
假如要一次向數據表中插入多條值呢?
executemany()方法可以一次插入多條值,執行單挑sql語句,但是重復執行參數列表裏的參數,返回值為受影響的行數。
#coding=utf-8 import MySQLdb conn= MySQLdb.connect( host=‘localhost‘, port = 3306, user=‘root‘, passwd=‘123456‘, db =‘test‘, ) cur = conn.cursor() #一次插入多條記錄 sqli="insert into student values(%s,%s,%s,%s)" cur.executemany(sqli,[ (‘3‘,‘Tom‘,‘1 year 1 class‘,‘6‘), (‘3‘,‘Jack‘,‘2 year 1 class‘,‘7‘), (‘3‘,‘Yaheng‘,‘2 year 2 class‘,‘7‘), ]) cur.close() conn.commit() conn.close()
六,鞏固練習
練習題:
參考表結構:
用戶類型
用戶信息
權限
用戶類型&權限
功能:
# 登陸、註冊、找回密碼
# 用戶管理
# 用戶類型
# 權限管理
# 分配權限
特別的:程序僅一個可執行文件
python python操作MySQL