python讀取mysql數據庫_Python操作MySQL數據庫9個實用實例

在Windows平臺上安裝mysql模塊用于Python開發

用python連接mysql的時候,需要用的安裝版本,源碼版本容易有錯誤提示。下邊是打包了32與64版本。

MySQL-python-1.2.3.win32-py2.7.exe

MySQL-python-1.2.3.win-amd64-py2.7.exe

實例 1、取得 MYSQL 的版本

# -*- 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()

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

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')")

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

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')

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

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

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

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、獲取單個表的字段名和信息的方法

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 執行查詢(更安全方便)

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 代碼進行:

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)

20151211110305157.png?2015111111317

實例 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 即事務(手動提交,自動回滾)

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 引擎,則都不會執行。

更多關于python安裝教程的文章請參考《python各版本安裝教程》

以上就是為大家分享的9個實用的Python操作MySQL數據庫實例,希望對大家的學習有所幫助。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538958.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538958.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538958.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

win主機上搭建php網站運行環境,Windows server 2008搭建php運行環境圖文詳解(php5.3)

這篇文章主要為大家分享下Windows server 2008搭建php運行環境的步驟,需要的朋友可以參考下下載php組件包首先到http://windows.php.net/download/下載你需要的php版本,這里我下載的是php5.3。下面解壓php組件 包到磁盤上。安裝Microsoft Visual C 2008 …

python 登陸微博 被刪除 token_爬取微博信息,使用了cookie仍然無法登錄微博

按照網上的模板自己寫了類似的代碼爬取微博,可是response回來的html是登錄界面的html,應該是沒有成功登陸微博,但是和網上的代碼是基本一樣的from bs4 import BeautifulSoupimport pandas as pdimport requestsurl "https://weibo.cn/2…

plsql developer連接oracle--本地不安裝oracle

工具 數據庫開發程序 PLSQL Developer oracle 客戶端 instantclient,點擊下載 (下載與oracle相同版本或最新版本,如果 PLSQL Developer是32位,則要下載32位的)安裝 1、解壓oracle客戶端 到盤某個目錄。我的目錄是C:\or…

ubuntu networking 與 network-manager

剛遇到的坑,因為操作不當導致網絡中斷,于是手動配置了/etc/network/interfaces , 修復了系統之后發現ubuntu-desktop中的有線鏈接不見了,百度了一下說是networking服務和network-manger服務會起沖突。 【Server版本】 在UbuntuServer版本中&…

mysql 升序_mysql 的 查找 與 排序

mysql 的 查找 &#xff1a;SELECT name,age FROM mytable; # 在mytable 中所有的name,age 數據SELECT name,age FROM mytable WHERE age>25; #在mytable 中所有的name,age 數據&#xff0c;其中age必須小于25SELECT name,age FROM mytable WHERE age<25 OR age>30; #…

Hadoop3.0的新特性

轉載&#xff1a;http://blog.csdn.net/sinat_31726559/article/details/52103229 點擊閱讀原文 -------------------------------------- 1. Hadoop3.0簡介 Hadoop 2.0是基于JDK 1.7開發的&#xff0c;而JDK 1.7在2015年4月已停止更新&#xff0c;這直接迫使Hadoop社區基于…

python torch exp_學習Pytorch過程遇到的坑(持續更新中)

1. 關于單機多卡的處理&#xff1a;在pytorch官網上有一個簡單的示例&#xff1a;函數使用為&#xff1a;torch.nn.DataParallel(model, deviceids, outputdevice, dim)關鍵的在于model、device_ids這兩個參數。DATA PARALLELISM?pytorch.org但是官網的例子中沒有講到一個核心…

php 讀文件返回字符串,PHP:file_get_contents('php:// input')返回JSON消息的字符串...

我正在嘗試在我的PHP應用程序中讀取JSON消息&#xff0c;這是我的php代碼&#xff1a;$json file_get_contents(php://input);$obj json_decode($json, TRUE);echo $obj->{S3URL};當我這樣做時&#xff0c;出現以下錯誤&#xff1a;Trying to get property of non-object …

Android中ListView數據使用sAdapter.notifyDataSetChanged();方法不刷新的問題

原文鏈接&#xff1a;http://blog.csdn.net/caihongdao123/article/details/51513410 點擊閱讀原文 ------------------------- 1.涉及到數據庫 當要動態顯示更數據庫改動&#xff0c;相信大家應該都用過notifyDataSetChanged();. 例如&#xff1a; ...... …

keepalived配置高可用集群

準備工作 分別在主從上安裝keepalived和nginxyum install -y keepalivedyum install -y nginx關閉主從上的防火墻和SELinuxsystemctl stop firewalldsetenforce 0 配置主機 查看主機ip [rootlynn-04 ~]# ifconfig ens33: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu…

如何快速掌握python包_如何快速掌握一個python模塊?

初學者就別想快了。 我自己是這樣的。先上網看看一些基礎的教程&#xff0c;非常快的過一下&#xff0c;十幾分鐘&#xff0c;主要是了解這個module能干什么&#xff0c;特別是一些基本的功能&#xff0c;頭腦中建立起初步映射。 然后就是用了&#xff0c;不用看了也白搭。我假…

python設計一個函數定義計算并返回n價調和函數_python函數的調和平均值?

我有兩個函數&#xff0c;給出精度和召回分數&#xff0c;我需要做一個調和平均函數&#xff0c;定義在同一個庫中&#xff0c;使用這兩個分數。函數如下所示&#xff1a;功能如下&#xff1a;def precision(ref, hyp):"""Calculates precision.Args:- ref: a l…

jsp超鏈接到java文件,jsp頁面超鏈接傳中文終極解決辦法

在做web前端頁面的時候&#xff0c;經常碰到傳中文問題。網上有許多方案&#xff0c;但仍不能根治&#xff0c;最終要用js或者java的encode相關方法。常規方案有三部&#xff1a;1.改tomcat的server.xml中URIEncodeing為utf-82.頁面中編碼設置為utf-83.整個項目編碼使用utf-8我…

自定義ListView中的分割線

原文&#xff1a;http://blog.csdn.net/zuolongsnail/article/details/7187302點擊閱讀 --------------------------------------- ListView中每個Item項之間都有分割線&#xff0c;設置Android:footerDividersEnabled表示是否顯示分割線&#xff0c;此屬性默認為true。 1.不顯…

隱藏域input里面放當前時間_【小A問答】Win10的隱藏小秘密,被我發現了!

無驚無險又到小A問答環節辣~~今天的小A要來給大家分享一些小秘密&#xff01;當然&#xff0c;這可不是小A自己的小秘密&#xff0c;是關于你電腦的小秘密哦&#xff01;知道嗎&#xff1f;Windows10每一次升級更新&#xff0c;都會伴隨著新功能的增加。這些隱藏的功能你都發現…

網絡相關的面試題

1&#xff09;簡述tcp/ip的三次交互過程&#xff08;個人理解&#xff1a;syn是握手信號&#xff0c;ack是確認信號&#xff0c;ack就相當于前面的syn值1&#xff0c;簡單一點理解就是客戶端發送握手請求&#xff0c;服務器收到握手請求后&#xff0c;回復一個包確認它接收到了…

h5文字垂直居中_CSS中垂直居中和水平垂直居中的方法

flex垂直居中&#xff1a;第一種&#xff1a;使用flex布局&#xff0c;讓居中元素的父元素為flex屬性,讓它在交叉軸上center就可以達到居中效果了&#xff1a;html代碼: <div class"father"><p>我要垂直居中</p> </div>css代碼: .father {…

ListMap排序

//compareto就是比較兩個數據的大小關系 大于0表示前一個數據比后一個數據大&#xff0c; 0表示相等&#xff0c;小于0表示第一個數據小于第二個數據 public static List<Map<String, String>> sortWifi(List<Map<String, String>> wifiList){if(wif…

thinkphp回調的php調用db類,請問thinkphp中model類自動完成功能 回調函數能不能獲取其他字段的值?...

http://www.thinkphp.cn/api/source-class-Model.html#975protected function _validationFieldItem($data,$val) {switch(strtolower(trim($val[4]))) {case function:// 使用函數進行驗證case callback:// 調用方法進行驗證$args isset($val[6])?(array)$val[6]:array();if…

輸入年份和月份輸出該月有多少天python_Python實現用戶輸入年月日,程序打印出這是這一年的第多少天...

1. 自己造輪子yearint(input(請輸入年份&#xff0c;如2019>>>))monthint(input(請輸入月份&#xff0c;如8>>>))dayint(input(請輸入日期,如25>>>))#下面這塊代碼是按照閏年計算if (year%40 and year%100!0) or (year%4000):calendar{1:31,2:29,3:…