python Mysql查询更新数据例子

python操作Mysql,很方便,使用的MySQLdb的库,基本的操作如下:

查询:

 1 try:
 2     conn = MySQLdb.connect(host=self.ip, user=self.username,passwd=self.password, db=self.dbname, port=self.port)
 3     cur = conn.cursor()
 4     cur.execute(sql)
 5     rows = cur.fetchall()
 6     data = rows
 7 except MySQLdb.Error, e:
 8     print str(e)
 9     print "Connet mysql db error..."
10     sys.exit()

插入数据:

try:
    conn = MySQLdb.connect(host=self.ip, user=self.username, passwd=self.password, db=self.dbname, port=self.port)
    cur = conn.cursor()
    cur.execute(sql, value)
    conn.commit()
    conn.close()
    cur.close()
except MySQLdb.Error, e:
    print str(e)
    print "Execute mysql db error..."
    sys.exit()

使用过程中遇到了编码的问题,使用utf-8解决编码问题:

conn.set_character_set('utf8')
cur.execute('SET NAMES utf8;')
cur.execute('SET CHARACTER SET utf8;')
cur.execute('SET character_set_connection=utf8;')

还有遇到反斜杠的问题,mysql默认把反斜杠转义了,我的解决方法是将反斜杠换成双反斜杠:

datapath = datapath.replace('\\', '\\\\')
mysql语句需要格式化字符串,查询的sql字符串需要用%来代表变量占位,不过python好像必须要用%s

executemany还支持多条数据同时插入,不过我没有使用这个,因为在外面加循环处理也很方便。

以下实例链接Mysql的TESTDB数据库:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标
cursor = db.cursor()

# 使用execute方法执行SQL语句
cursor.execute("SELECT VERSION()")

# 使用 fetchone() 方法获取一条数据库。
data = cursor.fetchone()

print "Database version : %s " % data

# 关闭数据库连接
db.close()
执行以上脚本输出结果如下:
Database version : 5.0.45
创建数据库表
如果数据库连接存在我们可以使用execute()方法来为数据库创建表,如下所示创建表EMPLOYEE:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import MySQLdb

# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# 使用cursor()方法获取操作游标
cursor = db.cursor()

# 如果数据表已经存在使用 execute() 方法删除表。
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# 创建数据表SQL语句
sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT, 
         SEX CHAR(1),
         INCOME FLOAT )"""

cursor.execute(sql)

# 关闭数据库连接
db.close()

下面贴一下常用的函数:

然后,这个连接对象也提供了对事务操作的支持,标准的方法
commit() 提交
rollback() 回滚

cursor用来执行命令的方法:
callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
executemany(self, query, args):执行单挑sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
nextset(self):移动到下一个结果集

cursor用来接收返回值的方法:
fetchall(self):接收全部的返回结果行.
fetchmany(self, size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
fetchone(self):返回一条结果行.
scroll(self, value, mode='relative'):移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果 mode='absolute',则表示从结果集的第一行移动value条.

时间: 2024-10-09 02:13:35

python Mysql查询更新数据例子的相关文章

如何解决mysql查询百万数据时出现大量sleep的进程

问题描述 如何解决mysql查询百万数据时出现大量sleep的进程 如何解决mysql查询百万数据时出现大量sleep的进程: 当使用jdbc 查询数据量为100多万的数据时,mysql会出现大量sleep的进程,然后程序便会卡死在那儿 解决方案 描述的有点泛泛,如果能把使用场景.涉及库表定义发一下会更容易分析. 大量sleep进程可能并不是问题,因为如果使用到连接池的话,一开始就是初始化一些连接,这些连接没有使用的话,在mysql看可能就是sleep的. 从你描述,感觉"查询数据量为100多万

MySQL删除/更新数据时报1175错误

原文 MySQL删除/更新数据时报1175错误 今天删除mysql数据库中的一条记录的时候,一直不能删除,提示错误信息如下: [html] view plaincopy Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that    [html] view plaincopy uses a KEY column To disable safe mode

MySQL查询随机数据的4种方法和性能对比

 从MySQL随机选取数据也是我们最常用的一种发发,其最简单的办法就是使用"ORDER BY RAND()",本文介绍了包括ORDER BY RAND()的4种获取随机数据的方法,并分析了各自的优缺点. 下面从以下四种方案分析各自的优缺点. 方案一:  代码如下:SELECT * FROM `table` ORDER BY RAND() LIMIT 0,1; 这种方法的问题就是非常慢.原因是因为MySQL会创建一张零时表来保存所有的结果集,然后给每个结果一个随机索引,然后再排序并返回.

php中如何设置mysql查询读取数据的超时时间

现象: php能通过代理正常连接到mysql.但是,执行query后,一直等待,没有任何数据返回. 结果导致php-fpm进程全部阻塞在读取数据的地方.不能处理其他正常请求. 解决方法: 可以通过设置mysql查杀的超时时间来解决这个问题. 第一种设置mysql查询超时时间的方法是使用mysqlnd. 关于msyqlnd的介绍,大家可以看下这篇文章 http://www.bo56.com/php-mysqlnd-简介/ php启用mysqlnd扩展后,只要在php.ini文件中设置 mysqln

php设置mysql查询读取数据的超时时间

现象:php能通过代理正常连接到mysql.但是,执行query后,一直等待,没有任何数据返回. 结果导致php-fpm进程全部阻塞在读取数据的地方.不能处理其他正常请求.解决方法: 可以通过设置mysql查杀的超时时间来解决这个问题. 第一种设置mysql查询超时时间的方法是使用mysqlnd. php启用mysqlnd扩展后,只要在php.ini文件中设置 mysqlnd.net_read_timeout 即可. 参数值的单位为秒.如: mysqlnd.net_read_timeout =

ECharts使用jQuery和PHP、MySQL异步读取数据例子

ECharts地图主要用于地理区域数据的可视化,展示不同区域的数据分布信息.ECharts官网提供了中国地图.世界地图等地图数据下载,通过js引入或异步加载json文件的形式调用地图. ECharts地图应用:使用jQuery和PHP.MySQL异步读取数据 本文将结合实例讲解如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据,我们以中国地图为例,展示去年(2015年)我国各省份GDP数据.通过异步请求php,读取mysql中的数据,然后展示在地图上,因此本文除了你掌握前

mysql查询大量数据异常

问题描述 The driver was unable to create a connection due to an inability to establish the client portion of a socket.This is usually caused by a limit on the number of sockets imposed by the operating system. This limit is usually configurable. For Unix

MySQL 随机查询数据与随机更新数据实现代码_Mysql

MySQL随机查询数据 以前在群里讨论过这个问题,比较的有意思.MySQLl的语法真好玩.他们原来都想用PHP的实现随机,但取出多条好像要进行两次以上查询.翻了手册,找到了下面这个语句,可以完成任务了. 复制代码 代码如下: SELECT * FROM table_name ORDER BY rand() LIMIT 5; MySQL的rand()函数在手册里是这么说的: RAND() RAND(N) 返回在范围0到1.0内的随机浮点值.如果一个整数参数N被指定,它被用作种子值. 关于MySQL

php向Mysql数据库保存数据代码示例

PHP向MySQL数据库中写入数据有三个步骤: 1,PHP和MySQL建立连接关系 2,打开MySQL数据库 3,接受页面数据,PHP录入到指定的表中 1.2两步可直接使用一个数据库链接文件即可:conn.php  代码如下 复制代码 <?php mysql_connect("localhost","root","");//连接MySQL mysql_select_db("mythroad");//选择数据库 ?>