使用Python操作MySQL的一些基本方法

來源:互聯網
上載者:User
前奏

為了能操作資料庫, 首先我們要有一個資料庫, 所以要首先安裝Mysql, 然後建立一個測試資料庫python_test用以後面的測試使用

CREATE DATABASE `python_test` CHARSET UTF8

匯入資料庫模組

import MySQLdb

串連資料庫

con = MySQLdb.connect(host="localhost", user="root", passwd="******",db="python_test",port=3306)

在這裡, 我們雖然拿到了python的資料庫連接, 但是不能在這個對象上直接對資料庫進行操作, 還需要擷取對應的操作遊標才能進行資料庫的操作,所以還需要進行下面的操作

cur = con.cursor()

建立表格

cur.execute('create table stu_info (name char(128) not null default "", age tinyint(3) not null default 0, sex enum("man","femal") not null default "man") engine=innodb charset=utf8')#0L

cur.execute 返回執行的sql 影響的行數, 因為這裡是建立資料庫, 所以是0L行

但到這裡還並沒有真正執行了sql語句, 必須使用MySQLdb.commit才是真正執行完畢

con.commit()

到這裡, 我們的表格才算真正建立完成

同理, 往表中寫資料, 也是一樣的操作流程 execute ==> commit

不過, 寫入資料的execute 稍有不同, 如下
更新表資料

往表中寫入資料時, 執行execute 方法, 有兩種方式, 一種是直接execute(sql), 然後commit 完成, sql裡是寫入的sql 語句

cur.execute("insert into stu_info (name, age, sex) values ('Yi_Zhi_Yu',25,'man')")con.commit()

這會直接寫入表中,但還有另外一種方式,
execute 可以接受兩個參數, 第一個參數是sql語句, 不過這個sql中的values的內容使用預留位置%s表示,第二個參數是實際的寫入的values列表, 如下:

cur.execute("insert into stu_info (name, age, sex) values (%s,%s,%s)", ("Tony",25, "man"))con.commit()

這種方式與第一中方式相比, 更清晰一些, 安全性也更好, 能有效防止sql注入

另外, cursor還有一個executemany, 參數和execute一樣, 不過第二個參數可以傳遞多列表值, 達到多次執行某個語句的效果

cur.executemany("insert into stu_info (name, age, sex) values (%s,%s,%s)",(("LiMei",26,"femal"),("YuanYuan",28,"femal")))con.commit()

這裡實際上就是執行了兩次插入操作
資料查詢

直接看例子

cur.execute("select * from stu_info")stus = cur.fetchall() 

#stus 已經是查詢的結果結合了, 格式如下:

(('Yi_Zhi_Yu', 25, 'man'), ('Tony', 25, 'man'), ('LiMei', 26, 'femal'), ('YuanYuan', 28, 'femal'))

tuple形式, 我們可以通過迴圈輸出

 for stu in stus:    print "name: %s; age: %d; sex: %s" %(stu[0], stu[1], stu[2])

輸出:

name: Yi_Zhi_Yu; age: 25; sex: manname: Tony; age: 25; sex: manname: LiMei; age: 26; sex: femalname: YuanYuan; age: 28; sex: femal

那上面的查詢雖然得到了每行的資料, 但結果集中並沒有欄位名, 如果要返回欄位名, 如下操作:

cur = con.cursor(cursorclass=MySQLdb.cursors.DictCursor)cur.execute("select * from stu_info")cur.fetchall()

返回的結果集:

({'age': 25, 'name': 'Yi_Zhi_Yu', 'sex': 'man'}, {'age': 25, 'name': 'Tony', 'sex': 'man'}, {'age': 26, 'name': 'LiMei', 'sex': 'femal'}, {'age': 28, 'name': 'YuanYuan', 'sex': 'femal'})

每個元素都是一個dict, 以key-value的形式展示了每個欄位和對應的值
總結

Python 中對資料的操作, 增刪改均要在指標對象執行了sql語句後, 使用連線物件commit, 查詢的結果使用指標對象的fetch系列方法擷取

PS: 以上皆為學習筆記, 難免有錯, 歡迎指正

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.