日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Python操作Mysql实例代码教程在线版(查询手册)_python

發布時間:2023/11/30 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python操作Mysql实例代码教程在线版(查询手册)_python 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實例1、取得MYSQL的版本

在windows環境下安裝mysql模塊用于python開發

MySQL-python Windows下EXE安裝文件下載

復制代碼?代碼如下:
# -*- coding: UTF-8 -*-

#安裝MYSQL DB for python
import MySQLdb as mdb

con = None

try:
??? #連接mysql的方法:connect('ip','user','password','dbname')
??? con = mdb.connect('localhost', 'root',
??????? 'root', 'test');

??? #所有的查詢,都在連接con的一個模塊cursor上面運行的
??? cur = con.cursor()

??? #執行一個查詢
??? cur.execute("SELECT VERSION()")

??? #取得上個查詢的結果,是單個結果
??? data = cur.fetchone()
??? print "Database version : %s " % data
finally:
??? if con:
??????? #無論如何,連接記得關閉
??????? con.close()

?
?執行結果:

復制代碼?代碼如下:
Database version : 5.5.25

實例2、創建一個表并且插入數據

主要還是在cursor上面執行execute方法來進行,請見源碼:

復制代碼?代碼如下:
# -*- coding: UTF-8 -*-
# 來源于總結整理
import MySQLdb as mdb
import sys

#將con設定為全局連接
con = mdb.connect('localhost', 'root', 'root', 'test');

with con:

??? #獲取連接的cursor,只有獲取了cursor,我們才能進行各種操作
??? cur = con.cursor()
??? #創建一個數據表 writers(id,name)
??? cur.execute("CREATE TABLE IF NOT EXISTS \
??????? Writers(Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(25))")
??? #以下插入了5條數據
??? cur.execute("INSERT INTO Writers(Name) VALUES('Jack London')")
??? cur.execute("INSERT INTO Writers(Name) VALUES('Honore de Balzac')")
??? cur.execute("INSERT INTO Writers(Name) VALUES('Lion Feuchtwanger')")
??? cur.execute("INSERT INTO Writers(Name) VALUES('Emile Zola')")
??? cur.execute("INSERT INTO Writers(Name) VALUES('Truman Capote')")



運行結果(在phpmyadmin中查看,在mysql命令行查看結果是一樣的):?



實例3、python使用slect獲取mysql的數據并遍歷

這個恐怕是用的最多的了,請速看代碼:

復制代碼?代碼如下:
# -*- coding: UTF-8 -*-
# 來源:整理總結
import MySQLdb as mdb
import sys

#連接mysql,獲取連接的對象
con = mdb.connect('localhost', 'root', 'root', 'test');

with con:
??? #仍然是,第一步要獲取連接的cursor對象,用于執行查詢
??? cur = con.cursor()
??? #類似于其他語言的query函數,execute是python中的執行查詢函數
??? cur.execute("SELECT * FROM Writers")

??? #使用fetchall函數,將結果集(多維元組)存入rows里面
??? rows = cur.fetchall()

??? #依次遍歷結果集,發現每個元素,就是表中的一條記錄,用一個元組來顯示
??? for row in rows:
??????? print row


運行結果:

復制代碼?代碼如下:
(1L, ‘Jack London')
(2L, ‘Honore de Balzac')
(3L, ‘Lion Feuchtwanger')
(4L, ‘Emile Zola')
(5L, ‘Truman Capote')

上面的代碼,用來將所有的結果取出,不過打印的時候是每行一個元祖打印,現在我們使用方法,取出其中的單個數據:

復制代碼?代碼如下:
# -*- coding: UTF-8 -*-
# 來源:瘋狂的螞蟻的博客總結整理

import MySQLdb as mdb
import sys

#獲取mysql的鏈接對象
con = mdb.connect('localhost', 'root', 'root', 'test');

with con:
??? #獲取執行查詢的對象
??? cur = con.cursor()

??? #執行那個查詢,這里用的是select語句
??? cur.execute("SELECT * FROM Writers")

??? #使用cur.rowcount獲取結果集的條數
??? numrows = int(cur.rowcount)

??? #循環numrows次,每次取出一行數據
??? for i in range(numrows):
??????? #每次取出一行,放到row中,這是一個元組(id,name)
??????? row = cur.fetchone()
??????? #直接輸出兩個元素
??????? print row[0], row[1]

?
?運行結果:

復制代碼?代碼如下:
1 Jack London
2 Honore de Balzac
3 Lion Feuchtwanger
4 Emile Zola
5 Truman Capote

numrows = int(cur.rowcount)用于獲取結果集的數目?
row = cur.fetchone()每次取出一行數據,同時記錄集的指針執行下一行

實例4、使用字典cursor取得結果集(可以使用表字段名字訪問值)

?

復制代碼?代碼如下:
# -*- coding: UTF-8 -*-
# 來源:瘋狂的螞蟻的博客總結整理

import MySQLdb as mdb
import sys

#獲得mysql查詢的鏈接對象
con = mdb.connect('localhost', 'root', 'root', 'test')

with con:
??? #獲取連接上的字典cursor,注意獲取的方法,
??? #每一個cursor其實都是cursor的子類
??? cur = con.cursor(mdb.cursors.DictCursor)

??? #執行語句不變
??? cur.execute("SELECT * FROM Writers")

??? #獲取數據方法不變
??? rows = cur.fetchall()

??? #遍歷數據也不變(比上一個更直接一點)
??? for row in rows:
??????? #這里,可以使用鍵值對的方法,由鍵名字來獲取數據
??????? print "%s %s" % (row["Id"], row["Name"])

實例5、獲取單個表的字段名和信息的方法

?

復制代碼?代碼如下:
# -*- coding: UTF-8 -*-
# 來源:瘋狂的螞蟻的博客總結整理

import MySQLdb as mdb
import sys

#獲取數據庫的鏈接對象
con = mdb.connect('localhost', 'root', 'root', 'test')

with con:
??? #獲取普通的查詢cursor
??? cur = con.cursor()
??? cur.execute("SELECT * FROM Writers")

??? rows = cur.fetchall()

??? #獲取連接對象的描述信息
??? desc = cur.description
??? print 'cur.description:',desc

??? #打印表頭,就是字段名字
??? print "%s %3s" % (desc[0][0], desc[1][0])

??? for row in rows:
??????? #打印結果
??????? print "%2s %3s" % row

?
?運行結果:

復制代碼?代碼如下:
cur.description: ((‘Id', 3, 1, 11, 11, 0, 0), (‘Name', 253, 17, 25, 25, 0, 1))
Id Name
1 Jack London
2 Honore de Balzac
3 Lion Feuchtwanger
4 Emile Zola
5 Truman Capote

實例6、使用Prepared statements執行查詢(更安全方便)

?

復制代碼?代碼如下:
# -*- coding: UTF-8 -*-
# 來源:瘋狂的螞蟻的博客總結整理
import MySQLdb as mdb
import sys

con = mdb.connect('localhost', 'root', 'root', 'test')

with con:???

??? cur = con.cursor()
??? #我們看到,這里可以通過寫一個可以組裝的sql語句來進行
??? cur.execute("UPDATE Writers SET Name = %s WHERE Id = %s",
??????? ("Guy de Maupasant", "4"))
??? #使用cur.rowcount獲取影響了多少行
??? print "Number of rows updated: %d" % cur.rowcount

結果:

復制代碼?代碼如下:
Number of rows updated: 1

實例7、把圖片用二進制存入MYSQL
有人喜歡把圖片存入MYSQL(這種做法貌似很少吧),我看大部分的程序,圖片都是存放在服務器上的文件,數據庫中存的只是圖片的地址而已,不過MYSQL是支持把圖片存入數據庫的,也相應的有一個專門的字段BLOB (Binary Large Object),即較大的二進制對象字段,請看如下程序,注意測試圖片自己隨便找一個,地址要正確:

首先,在數據庫中創建一個表,用于存放圖片:

復制代碼?代碼如下:
CREATE TABLE Images(Id INT PRIMARY KEY AUTO_INCREMENT, Data MEDIUMBLOB);

然后運行如下PYTHON代碼進行:

復制代碼?代碼如下:
# -*- coding: UTF-8 -*-
# 來源:瘋狂的螞蟻的博客總結整理
import MySQLdb as mdb
import sys

try:
??? #用讀文件模式打開圖片
??? fin = open("../web.jpg")
??? #將文本讀入img對象中
??? img = fin.read()
??? #關閉文件
??? fin.close()

except IOError, e:
??? #如果出錯,打印錯誤信息
??? print "Error %d: %s" % (e.args[0],e.args[1])
??? sys.exit(1)

try:
??? #鏈接mysql,獲取對象
??? conn = mdb.connect(host='localhost',user='root',passwd='root', db='test')
??? #獲取執行cursor
??? cursor = conn.cursor()
??? #直接將數據作為字符串,插入數據庫
??? cursor.execute("INSERT INTO Images SET Data='%s'" % mdb.escape_string(img))

??? #提交數據
??? conn.commit()

??? #提交之后,再關閉cursor和鏈接
??? cursor.close()
??? conn.close()

except mdb.Error, e:
??? #若出現異常,打印信息
??? print "Error %d: %s" % (e.args[0],e.args[1])
??? sys.exit(1)

???
??? 結果:



escape_string函數將插入數據庫的字符串進行轉義,這會指一些SQL注入的攻擊

實例8、從數據庫中把圖片讀出來

?

復制代碼?代碼如下:
# -*- coding: UTF-8 -*-
# 來源:瘋狂的螞蟻的博客總結整理
import MySQLdb as mdb
import sys

try:
??? #連接mysql,獲取連接的對象
??? conn = mdb.connect('localhost', 'root', 'root', 'test');

??? cursor = conn.cursor()

??? #執行查詢該圖片字段的SQL
??? cursor.execute("SELECT Data FROM Images LIMIT 1")

??? #使用二進制寫文件的方法,打開一個圖片文件,若不存在則自動創建
??? fout = open('image.png','wb')
??? #直接將數據如文件
??? fout.write(cursor.fetchone()[0])
??? #關閉寫入的文件
??? fout.close()

??? #釋放查詢數據的資源
??? cursor.close()
??? conn.close()

except IOError, e:
??? #捕獲IO的異常 ,主要是文件寫入會發生錯誤
??? print "Error %d: %s" % (e.args[0],e.args[1])
??? sys.exit(1)
?



??? 實例9、使用Transaction即事務(手動提交,自動回滾)

???

復制代碼?代碼如下:
# -*- coding: UTF-8 -*-
# 來源:瘋狂的螞蟻的博客總結整理
import MySQLdb as mdb
import sys

try:
??? #連接mysql,獲取連接的對象
??? conn = mdb.connect('localhost', 'root', 'root', 'test');

??? cursor = conn.cursor()
??? #如果某個數據庫支持事務,會自動開啟
??? #這里用的是MYSQL,所以會自動開啟事務(若是MYISM引擎則不會)
??? cursor.execute("UPDATE Writers SET Name = %s WHERE Id = %s",
??????? ("Leo Tolstoy", "1"))
??? cursor.execute("UPDATE Writers SET Name = %s WHERE Id = %s",
??????? ("Boris Pasternak", "2"))
??? cursor.execute("UPDATE Writer SET Name = %s WHERE Id = %s",
??????? ("Leonid Leonov", "3"))??

??? #事務的特性1、原子性的手動提交
??? conn.commit()

??? cursor.close()
??? conn.close()

except mdb.Error, e:
??? #如果出現了錯誤,那么可以回滾,就是上面的三條語句要么執行,要么都不執行
??? conn.rollback()
??? print "Error %d: %s" % (e.args[0],e.args[1])
?

???
??? 結果:

1、因為不存在writer表(SQL第三條語句),所以出現錯誤:
Error 1146: Table ‘test.writer' doesn't exist
2、出現錯誤,出發異常處理,3條語句的前兩條會自動變成了沒有執行,結果不變
3、如果本代碼放到一個MyISAM引擎表,前兩句會執行,第三句不會;如果是INNDB引擎,則都不會執行。

為方便大家本地瀏覽特提供一個pdf版本下載

全文完,本文翻譯自:http://zetcode.com/databases/mysqlpythontutorial/

以上是云棲社區小編為您精心準備的的內容,在云棲社區的博客、問答、公眾號、人物、課程等欄目也有的相關內容,歡迎繼續使用右上角搜索按鈕進行搜索Python操作Mysql python mysql 實例、python實例手冊、python實例手冊 雪松、python mysql手冊、python 操作redis實例,以便于您獲取更多的相關知識。

轉載于:https://www.cnblogs.com/adolfmc/p/7461306.html

總結

以上是生活随笔為你收集整理的Python操作Mysql实例代码教程在线版(查询手册)_python的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。