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命令行查看结果是一样的): 

2013218162255339.png

实例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)

   
    结果:

2013218164010460.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/391508.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

批判性思维_为什么批判性思维技能对数据科学家至关重要

批判性思维As Alexander Pope said, to err is human. By that metric, who is more human than us data scientists? We devise wrong hypotheses constantly and then spend time working on them just to find out how wrong we were.正如亚历山大波普(Alexander Pope)所说…

leetcode 1143. 最长公共子序列(dp)

给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以…

【Spark】SparkStreaming-Kafka-Redis-集成-基础参考资料

SparkStreaming-Kafka-Redis-集成-基础参考资料 Overview - Spark 2.2.0 DocumentationSpark Streaming Kafka Integration Guide - Spark 2.2.0 DocumentationSpark Streaming Kafka Integration Guide (Kafka broker version 0.8.2.1 or higher) - Spark 2.2.0 Documentat…

Manjaro 17 搭建 redis 4.0.1 集群服务

安装Redis在Linux环境中 这里我们用的是manjaro一个小众一些的发行版 我选用的是manjaro 17 KDE 如果你已经安装好了manjaro 那么你需要准备一个redis.tar.gz包 这里我选用的是截至目前最新的redis 4.0.1版本 我们可以在官网进行下载 https://redis.io/download选择Stable &…

了解如何使用Flutter构建iOS和Android应用

Learn Flutter in this full course from Nick Manning (of fluttercrashcourse.com). Flutter is Google’s multi-platform mobile development framework used to create apps for Android and iOS using the Dart programming language. 可以从fluttercrashcourse.com的Nic…

leetcode 781. 森林中的兔子(hashmap)

森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers 数组里。 返回森林中兔子的最少数量。 示例: 输入: answers [1, 1, 2] 输出: 5 解释: 两只回答了 “1” 的兔…

快速排序简便记_建立和测试股票交易策略的快速简便方法

快速排序简便记Note from Towards Data Science’s editors: While we allow independent authors to publish articles in accordance with our rules and guidelines, we do not endorse each author’s contribution. You should not rely on an author’s works without se…

Java学习第1天:序言,基础及配置tomcat

所谓是福不是祸,是祸躲不过,到底还是回到java的阵地上来。既然它这么热,那就学学它,现在这件事已经提上议事日程,也已经开始。 今天做的事: 泛泛的翻了几本书,敲了一些练习代码,比如…

robot:List变量的使用注意点

创建list类型变量,两种方式,建议使用Create List关键字 使用该列表变量时需要变为${}方式,切记切记! 转载于:https://www.cnblogs.com/gcgc/p/11429482.html

python基础教程(十一)

迭代器 本节进行迭代器的讨论。只讨论一个特殊方法---- __iter__ ,这个方法是迭代器规则的基础。 迭代器规则 迭代的意思是重复做一些事很多次---就像在循环中做的那样。__iter__ 方法返回一个迭代器,所谓迭代器就是具有next方法的对象,在调…

编程需要数学知识吗_编程需要了解数学吗?

编程需要数学知识吗Does programming require knowing math? Not necessarily. 编程需要了解数学吗? 不必要。 When I say that, Im mostly talking about Web Development, not working with graphics or specific applications that require advanced math. 当我…

美剧迷失_迷失(机器)翻译

美剧迷失Machine translation doesn’t generate as much excitement as other emerging areas in NLP these days, in part because consumer-facing services like Google Translate have been around since April 2006.如今,机器翻译并没有像其他NLP新兴领域那样…

mysql 1449 : The user specified as a definer ('usertest'@'%') does not exist 解决方法 (grant 授予权限)...

从服务器上迁移数据库到本地localhost 执行 函数 时报错, mysql 1449 : The user specified as a definer (usertest%) does not exist 经查,是权限问题(其中usertest是服务器上数据库的登录名),解决办法: 授权给 u…

初识数据结构与算法

1、什么是数据结构? a、数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及它们之间的关系和操作等相关问题的学科。 b、数据结构是计算机存储、组织数据的方式,数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常…

产品经理思考

1.分析QQ与微信的区别,包含其中存在的问题,并给出解决方案。 2.如果你设计一款基于音乐的高品质内容的社交软件,给说出这么设计的原因。 3.请说出一款APP的的看法,指出其中不合理的地方,并说明原因(APP如果…

shopify 开发_播客第57集:从Shopify的作家到开发人员,与Adam Hollett一起

shopify 开发On this weeks episode of the freeCodeCamp podcast, Quincy interviews Adam Hollett. Hes a software developer at Shopify in Ottawa, Canada.在本周的freeCodeCamp播客节目中,Quincy采访了Adam Hollett。 他是加拿大渥太华Shopify的软件开发人员。…

机器学习中决策树的随机森林_决策树和随机森林在机器学习中的使用

机器学习中决策树的随机森林机器学习 (Machine Learning) Machine learning is an application of artificial intelligence that provides systems the ability to automatically learn and improve from experience without being explicitly programmed. The 3 main categor…

pycharm 快捷键

编辑: ctrl D   快速复制粘贴一行 ctrl E   快速删除一行 ctrl Z   撤销上一步命令或输入 end  快速跳到行末 shift enter  快速换行(尤其适用于光标不在行末时) ctrl F  查找 ctrl R  替换 转载于:https://www.cnblogs.com/Chris-0…

【Python算法】遍历(Traversal)、深度优先(DFS)、广度优先(BFS)

图结构: 非常强大的结构化思维(或数学)模型。如果您能用图的处理方式来规范化某个问题,即使这个问题本身看上去并不像个图问题,也能使您离解决问题更进一步。 在众多图算法中,我们常会用到一种非常实用的思…

r语言编程基础_这项免费的统计编程课程仅需2个小时即可学习R编程语言基础知识

r语言编程基础Learn the R programming language in this course from Barton Poulson of datalab.cc. This is a hands-on overview of the statistical programming language R, one of the most important tools in data science.从datalab.cc的 Barton Poulson学习本课程中…