首页 > 数据库 >Python中使用Mysql(编码实践)

Python中使用Mysql(编码实践)

时间:2022-10-09 16:01:48浏览次数:90  
标签:编码 handle cur Python db 查询 MySQLdb result Mysql


文档 或者看源码

​http://mysql-python.sourceforge.net/MySQLdb-1.2.2/public/MySQLdb-module.html​


开篇

在上一篇Python中使用Mysql(安装篇)中,我们为Python安装了支持MySQL数据库的MySQLdb包,这篇中写的是我工作中最常用到的几种情形。

虽然也支持在Python中创建表,之类的操作。但在实际中很少是通过程序去创建一个数据库或一张表的。 这些工作一般都是由公司的DBA来完成。所以对于研发来说, 对数据库最常做的事情包括查询,插入行,和更新行。在实际工作中,删除一些行的行为也是不常用的,因为删除了就不容易回来,当不需要一些数据时,通常有一个代表 可用和不可用的字段,比如叫 enable。 当想删除一行时候,把这一行的enable置成0 来代替删除的动作。


情形一,查询一行


下面是一段查询代码小例子:



#!/usr/local/bin/python
# coding:utf-8
import MySQLdb

db_handle = MySQLdb.connect(host = '10.10.10.10', user = 'root', passwd = '123456', db = 'test',port = 3306, charset = 'utf8')

sql = "select * from test.user_info limit 1"
cur = db_handle.cursor( MySQLdb.cursors.DictCursor )
cur.execute( sql )
result = cur.fetchone()
cur.close()
db_handle.close()
print result['id']




请看这一句

cur = db_handle.cursor( MySQLdb.cursors.DictCursor )

它使得上面的result是一个字典的对象,可以直接用索引来访问对应的字段。



情形二,查询多行



查询多行和查询一行基本一样,就是 用的是 fetchall() 代替 fetchone()





#!/usr/local/bin/python
# coding:utf-8
import MySQLdb

db_handle = MySQLdb.connect(host = '10.10.0.10', user = 'root', passwd = '123456', db = 'test',port = 3306, charset = 'utf8')

sql = "select * from user_info limit 3"
cur = db_handle.cursor( MySQLdb.cursors.DictCursor )
cur.execute( sql )
result = cur.fetchall()
cur.close()
db_handle.close()

if not result :
for row in result:
print row['id']




查询时候,总有可能是查不到的,这时fetchone的返回值是 None, 但fetchall() 的返回值 是 () 空的元组,而不是None。 所以可以通过 下面这句判断是不足的。


<pre name="code" class="python"><strong>if result == None :</strong>




这句对 fetchone()是有效的,但是对于 fetchall()是无效的,



推荐使用



<strong>if not result :</strong>



这样对于 None 或者 空的元组() 都是有效的。





fetchall()的返回是一个元组,所以不能直接取对应字段,通常我是用一个循环,来处理每一行的数据。






情形三,插入或者更新一行


插入和更新与 查询有不同之处在于 这个动作修改了数据库中的内容。 所以少了查询后fetch结果的动作,而换成了commit 提交的动作。 示例代码:



#!/usr/local/bin/python
# coding:utf-8
import MySQLdb

db_handle = MySQLdb.connect(host = '10.10.10.10', user = 'root', passwd = '123456', db = 'test',port = 3306, charset = 'utf8')

sql = "insert into fruit values ('','apple','fruit','red')"
cur = db_handle.cursor( MySQLdb.cursors.DictCursor )
cur.execute( sql )
db_handle.commit()
cur.close()
db_handle.close()



更新也是差不多的句式,只是SQL语句从insert 换成了 update了 ,最后不要忘记了 commit()。





标签:编码,handle,cur,Python,db,查询,MySQLdb,result,Mysql
From: https://blog.51cto.com/u_15815563/5740629

相关文章

  • Python中使用Mysql(安装篇)
    准备工作importMySQLdbLinux系统自带了Python,但并不是都有这个包,至少我每次拿到一台全新的服务器时候,都发现没有装这个包。这个东西的下载地址是​​http://sourceforge.n......
  • 使用c调用python
    windowc调用python的原理大概是将python当做一个c++库来调用导入头文件将python的头文件复制到项目中,头文件在python安装目录中在vs项目属性中的vc++目录的包含目录添......
  • mysql中set和enum枚举类型插入值和索引比较--笔记
    set,enum的数据类型都是字符串类型的对象,其中set最多可以包含64个元素,并且可以任意取到集合中的元素。而enum则是只能取到集合中的木一个元素,最多包含65536个元素,也就是说se......
  • 二十: MySql 事务日志
    MySql事务日志事务有4种特性:原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢?事务的隔离性由锁机制实现。而事务的原子性、一致性和持......
  • 二十一: Mysql 锁机制
    Mysql锁机制事务的隔离性由这章讲述的锁来实现。1.概述锁是计算机协调多个进程或线程并发访问某一资源的机制。在程序开发中会存在多线程同步的问题,当多个线程并......
  • 如何查看 MySQL 数据库容量大小,表容量大小,索引容量大小?找到占用空间最大的表
    1.查看MySQL「所有库」的容量大小SELECTtable_schemaas'数据库',sum(table_rows)as'记录数',sum(truncate(data_length/1024/1024,2))as'数据容量(MB)',su......
  • mysql之select使用篇1
    一、sql概述、规则数据导入1、sql概述sql有两个重要的标准分贝是sql92和sql96标准,今天使用sql一直遵循这两个标准,不通的数据库生产厂商都支持sql语句,但是也各有特有的内容2......
  • python递归算法
    递归是一种常见的解决问题的方法,即把问题逐渐简单化。递归的基本思想就是“自己调自己”,一个使用递归技术的方法将会直接或间接的调用自己。利用递归可以用简单的程序来解决......
  • Mysql字符集
    1、修改MySQL5.7字符集我们在新建数据库时(Navicat)界面时会遇到这两个选项,字符集和排序规则在MySQL8.0版本之前,MySQL5.7默认的客户端和服务器都用了latin1,而latin1是不......
  • mysql 大小写、sql_mode
    一、mysql大小写1、Windows和Linux平台区别在SQL中,关键字和函数名是不用区分字母大小写的,比如SELECT、WHERE、ORDER、GROUPBY等关键字,以及ABS、MOD、ROUND、MAX等......